У меня есть поток XML, возвращаемый из веб-сервиса, который приходит через HttpWebResponse.В настоящее время я загружаю xml в XmlTextReader, а затем перебираю узлы, чтобы получить переменные.Это работает, но крайне громоздко, поскольку некоторые дочерние узлы содержат данные, которые влияют на то, как я организую данные, которые предшествуют этому.Насколько мне известно, XmlTextReader является итеративным и предназначенным только для чтения.Поэтому, если дочерний узел x содержит данные, которые потенциально могут повлиять на родительский узел a, я уже прочитал родительский узел a к тому времени, когда доберусь до дочернего узла x, и все это - огромная головная боль.
IЯ относительно новичок в работе с XML в .net ... Есть ли лучший способ подойти к этому?Думаю, подумав вслух, я хотел бы иметь возможность читать входящий поток XML в объект, где я могу сказать: показать мне все во всех узлах x: затем установить их в класс.Исходя из того, что они есть, хорошо, я должен все в узле а .... и т. Д., И т. Д. Другими словами, не метод прямого чтения, а скорее взгляд сверху вниз на весь контент XML.Это возможно?
Вот пример кода о том, как я сейчас его обрабатываю:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
XmlTextReader reader = new XmlTextReader(responseStream);
while (reader.Read())
{
if (reader.Name == "Whatever")
{
var = reader.ReadString();
reader.Read();
... и т. Д. И т. Д. До конца xml.
Хорошо,Я думаю, что я почти там, мне просто нужно немного больше помощи.Ниже мой новый код, для которого я использую Linq to XML, и он работает нормально.У меня просто вопрос по вложенным данным.Последний элемент, который я получаю из xml: «ProductAlignment» на самом деле имеет дочерние узлы, которые мне нужно проанализировать в читаемом формате.Итак, прямо сейчас, с моим кодом, таким, какой он есть, он берет все дочерние элементы в ProductAlignment и смешивает их вместе в одной ячейке, когда я связываю все это с видом сетки.Как я могу запросить дочерние элементы в ProductAlignment к более читаемому формату?
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
XDocument xdoc = XDocument.Load(XmlReader.Create(responseStream));
var People= from Person in xdoc.Descendants("Person")
where Person.Element("Role").Value != "Admin"
orderby Person.Element("Role").Value
select new
{
Role= Person.Element("TerritoryRole").Value,
FirstName = Person.Element("FirstName").Value,
LastName = Person.Element("LastName").Value,
ProductAlignment = Person.Element("ProductAlignment").Value
};
gvTest.DataSource = People;
gvTest.DataBind();