Невозможно проанализировать строку XML с помощью Xdocument и Linq - PullRequest
0 голосов
/ 27 сентября 2019

Я хотел бы проанализировать приведенный ниже xml с помощью XDocument в Linq.

<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">
   <Sources>
      <Item>
         <Id>1</Id>
         <Name>John</Name>
      </Item>
      <Item>
         <Id>2</Id>
         <Name>Max</Name>
      </Item>
      <Item>
         <Id>3</Id>
         <Name>Ricky</Name>
      </Item>
   </Sources>
</string>

Мой код синтаксического анализа:

    var xDoc = XDocument.Parse(xmlString);
    var xElements = xDoc.Element("Sources")?.Elements("Item");
    if (xElements != null)
        foreach (var source in xElements)
        {
            Console.Write(source);
        }

xElements всегда равен нулю.Я также попытался использовать пространство имен, оно не сработало.Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вам нужно объединить пространство имен и напрямую использовать метод Descendants для извлечения всех Item узлов, таких как:

XNamespace ns ="http://tempuri.org/";
var xDoc = XDocument.Parse(xmlString);
var xElements = xDoc.Descendants(ns + "Item");

 foreach (var source in xElements)
 {
     Console.Write(source);
 }

. Это печатается на консоли:

<Item xmlns="http://tempuri.org/">
  <Id>1</Id>
  <Name>John</Name>
</Item><Item xmlns="http://tempuri.org/">
  <Id>2</Id>
  <Name>Max</Name>
</Item><Item xmlns="http://tempuri.org/">
  <Id>3</Id>
  <Name>Ricky</Name>
</Item>

См. рабочая ДЕМО скрипка

1 голос
/ 27 сентября 2019

Попробуйте код ниже:

string stringXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><string xmlns=\"http://tempuri.org/\"><Sources><Item><Id>1</Id><Name>John</Name></Item><Item><Id>2</Id><Name>Max</Name></Item><Item><Id>3</Id><Name>Ricky</Name></Item></Sources></string>";
XDocument xDoc = XDocument.Parse(stringXml);
var items = xDoc.Descendants("{http://tempuri.org/}Sources")?.Descendants("{http://tempuri.org/}Item").ToList();

Я проверил его, и он правильно показывает, что items имеет 3 элемента :) Может быть, вы использовали пространства имен по-другому (этого достаточно для проверки xDoc объекта в браузере объектов исм. его пространство имен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...