如何从XML文档中获取某个名称的元素作为XML String? (使用XDocument)
是的,我说有这个:<root>
<orange id="orange1"></orange>
<orange id="orange2"></orange>
<orange id="orange3"></orange>
<apple id="apple1"></apple>
<apple id="apple2"></apple>
<apple id="apple3"></apple>
</root>
如何才能获得苹果的XML?即这三行的XML字符串?
我目前的代码是:
using (TextReader reader = File.OpenText(xmlFilePath))
{
XDocument xmlDocument = XDocument.Load(reader);
string items = xmlDocument.Descendants("apple").ToString();
}
...但在此示例中,items
最终为:System.Xml.Linq.XContainer+<GetDescendants>d__a
而不是XML字符串。我似乎无法找到任何方法来回复匹配元素的XML。
答案 0 :(得分:2)
问题是您在调用ToString()
的结果上调用了Descendants()
。目前还不是很清楚你期望做什么,但你 正确地获取元素。例如:
using (TextReader reader = File.OpenText(xmlFilePath))
{
// Any reason for not using XDocument.Load(xmlFilePath)?
XDocument xmlDocument = XDocument.Load(reader);
var items = xmlDocument.Descendants("apple");
foreach (var item in items)
{
Console.WriteLine(item.Attribute("id").Value); // Or whatever
}
}
如果要连接将每个XElement
转换为字符串的结果,可以使用:
var items = string.Join("", xmlDocument.Descendants("apple"));
或
var items = string.Concat(xmlDocument.Descendants("apple"));
答案 1 :(得分:1)
使用String.Concat(xmlDocument.Descendants("apple"))
。
答案 2 :(得分:1)
您在xml元素的集合上使用ToString()
,因此您的结果。如果我正确地阅读您的要求,您需要以下内容:
var items = String.Join(Environment.NewLine,
xmlDocument.Descendants("apple")
.Select(e => e.ToString()));