如何从XML文档中获取特定名称的元素作为XML字符串?(带有XDocument)
本文关键字:XML 字符串 带有 XDocument 元素 文档 获取 定名称 | 更新日期: 2023-09-27 18:26:31
如何从XML文档中获取特定名称的元素作为XML字符串?(带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。
问题是您在调用Descendants()
的结果上调用ToString()
。目前还不清楚你期望它做什么,但你正在正确地获取元素。例如:
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"));
使用String.Concat(xmlDocument.Descendants("apple"))
。
您正在对xml元素的集合使用ToString()
,因此您得到了结果。如果我正确阅读了你的要求,你需要这样的东西:
var items = String.Join(Environment.NewLine,
xmlDocument.Descendants("apple")
.Select(e => e.ToString()));