繁体   English   中英

如何在C#中选择XML的后代节点?

[英]How to select descendant nodes of XML in c#?

这是我的XML变量,称为test具有以下XML,

<A>
      <X>
        <B  id="ABC">
          <C name="A" />
          <C name="B" />
          <C name="C" />
          <C name="G" />
        </B>
        <B id="ZYZ">
          <C name="A" />
          <C name="B" />
          <C name="C" />
          <C name="D" />
        </B>
      <X>
</A>

我正在使用以下c#代码创建result XML变量,

var result = new XElement(
                    "Result",
                    new[]
                        {                          
                            new XElement("First",test.Descendants("X"))
                        }
                        );

上面的代码抛出空异常。

我需要以下输出XML,

<Result>
  <B  id="ABC">
              <C name="A" />
              <C name="B" />
              <C name="C" />
              <C name="G" />
            </B>
  <B id="ZYZ">
              <C name="A" />
              <C name="B" />
              <C name="C" />
              <C name="D" />
  </B>
</Result>

任何帮助表示赞赏! :)

您可以这样尝试:

var xml = @"<A>
      <X>
        <B  id=""ABC"">
          <C name=""A"" />
          <C name=""B"" />
          <C name=""C"" />
          <C name=""G"" />
        </B>
        <B id=""ZYZ"">
          <C name=""A"" />
          <C name=""B"" />
          <C name=""C"" />
          <C name=""D"" />
        </B>
      </X>
</A>";
var doc = XDocument.Parse(xml);
var newDoc = new XElement("Result", doc.Root.Element("X").Elements());

//this will print the same output as you expect (the 2nd XML in question)
Console.WriteLine(newDoc.ToString());
<Names>
<Name>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
</Name>
<Name>
    <FirstName>James</FirstName>
    <LastName>White</LastName>
</Name>

要获取所有节点,请使用XPath表达式/ Names / Name。 第一个斜杠表示该节点必须是根节点。 SelectNodes方法返回将包含节点的XmlNodeList集合。

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); // suppose that myXmlString contains "<Names>...</Names>"

XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
 string firstName = xn["FirstName"].InnerText;
 string lastName = xn["LastName"].InnerText;
 Console.WriteLine("Name: {0} {1}", firstName, lastName);
}
var result = new XElement("Result", test.Descendants("B"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM