无法使用Xdocument和Linq解析xml字符串

时间:2019-09-27 06:33:29

标签: c# linq linq-to-xml

我想在Linq中使用XDocument解析以下xml。

<?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始终为null。我也尝试使用名称空间,但没有用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试以下代码:

#+begin_src ipython :session alinbx :results output
print(df.groupby('A').sum())
#+end_src

#+RESULTS:
:             C         D
: A
: bar  0.104028  1.071693
: foo  1.235065 -0.397013

我对其进行了测试,它正确地表明#+begin_src ipython :session alinbx :results output print(df.groupby(['A', 'B']).sum()) #+end_src #+RESULTS: : C D : A B : bar one 0.136203 -0.622480 : three 0.825478 -0.313981 : two -0.857654 2.008154 : foo one 1.489242 1.018899 : three 1.397533 1.050003 : two -1.651711 -2.445916 具有3种元素:)也许您使用了不同的命名空间(足以在对象浏览器中检查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(); 对象,并查看其命名空间)。

答案 1 :(得分:1)

您需要连接命名空间,并且可以直接使用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>

请参见working DEMO Fiddle