XDocument.Descendants不返回后裔(XDocument.Descendants n

2019-06-27 00:14发布

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SetNationalList xmlns="http://www.lge.com/ddc">
      <nationalList>
        <portnumber>6000</portnumber>
        <slaveaddress>7000</slaveaddress>
        <flagzone>2</flagzone>
        <flagindivisual>5</flagindivisual>
        <flagdimming>3</flagdimming>
        <flagpattern>6</flagpattern>
        <flaggroup>9</flaggroup>
      </nationalList>
    </SetNationalList>
  </s:Body>
</s:Envelope>

XDocument xdoc = XDocument.Parse(xml);
foreach (XElement element in xdoc.Descendants("nationalList"))
{
   MessageBox.Show(element.ToString());
}

我想通过下每一个节点进行迭代nationalList但它不是为我工作,它跳过foreach完全循环。 我在做什么错在这里?

Answer 1:

你不包括命名空间,这是"http://www.lge.com/ddc" ,从父元素默认:

XNamespace ns = "http://www.lge.com/ddc";
foreach (XElement element in xdoc.Descendants(ns + "nationalList"))
{
    ...
}


Answer 2:

你必须使用的命名空间:

XNameSpace ns = "http://www.lge.com/ddc";

foreach (XElement element in xdoc.Descendants(ns + "nationalList")
{
      MessageBox.Show(element.ToString());
}


Answer 3:

如果你不希望有使用NS前缀在所有的选择,你还可以在解析XML时删除的命名空间的前期。 例如:

XNamespace ns = "http://www.lge.com/ddc";
XDocument xdoc = XDocument.Parse(xml.Replace(ns, string.Empty));

foreach (XElement element in xdoc.Descendants("nationalList")
...


Answer 4:

这是正确的,你必须包括命名空间,但样品上面,除非你把命名空间在大括号不工作:

XNameSpace ns = "http://www.lge.com/ddc";

foreach (XElement element in xdoc.Descendants("{" + ns + "}nationalList")
{
      MessageBox.Show(element.ToString());
}

基督教的问候



文章来源: XDocument.Descendants not returning descendants