Вытащить XElement - C#
Формулировка задачи:
Здравствуйте, подскажите пожалуйста, почему не получается получить элемент xml.Element("history")?
Вот исходный xml:
<history xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <row id="bef400d4-bb1c-4393-856d-fb91d2413b33" author="320ab7fc-8b75-4de7-b43a-a6567095841c" sTime="2017-03-14T08:49:51"> <changedItem id="12a9cb2f-7f43-4861-bae1-a15297f97c89" parentId="bef400d4-bb1c-4393-856d-fb91d2413b33" propertyName="Title"> <oldValue>ppc lipo 10 мл</oldValue> <newValue>ppc lipo 10 мл12</newValue> <propertyType>String</propertyType> </changedItem> </row> <row id="f7c67c87-8421-47ba-84c0-271e018b4214" author="320ab7fc-8b75-4de7-b43a-a6567095841c" sTime="2017-03-14T08:50:23"> <changedItem id="591dc8ab-93e2-46c7-9913-bb69fbc38972" parentId="f7c67c87-8421-47ba-84c0-271e018b4214" propertyName="Title"> <oldValue>ppc lipo 10 мл12</oldValue> <newValue>ppc lipo 10 мл121</newValue> <propertyType>String</propertyType> </changedItem> </row> </history>
Подразумевается, что в этом xml поле будут и другие корневые элементы, поэтому для моего метода необходимо получить именно тег
public IEnumerable<HistoryModel> GetHistoryRows(long id) { XElement xml = this.Connection.Query<XElement>($@"SELECT XmlInfo FROM dbo.sale_ProductInfo WHERE Id = @id", new { id }).SingleOrDefault().Element("history"); //xml = this.Connection.Query<XElement>("SELECT XmlInfo.query('/history') FROM dbo.sale_ProductInfo WHERE Id = @id", new { id }).SingleOrDefault(); if (xml == null) return new List<HistoryModel>(); return HistoryModel.GetHistoryRows(xml); }
в результате выполнения запроса xml = null, непонятно почему, нужный тег явно там есть, может мешают его аттрибуты?
Или то, что элемент является root элементом?
Здесь есть знатоки XElementa?
Решение задачи: «Вытащить XElement»
textual
Листинг программы
XElement xml = this.Connection.Query<XElement>($@"SELECT XmlInfo FROM dbo.sale_ProductInfo WHERE Id = @id", new { id }).SingleOrDefault(); if (xml == null || xml.Name.LocalName != "history") return new List<HistoryModel>(); return HistoryModel.GetHistoryRows(xml);