[英]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.