使用 XML 获取所有同名元素的内容?
Posted
技术标签:
【中文标题】使用 XML 获取所有同名元素的内容?【英文标题】:Get the contents of all elements with the same name using XML? 【发布时间】:2012-10-02 06:50:17 【问题描述】:我试图在我的程序中解析一些 XML,但我似乎无法找出最好的方法。
XML 有一个称为“容器”的元素。该元素有多个称为“文本”的后代。我想做的是按顺序提取“文本”元素中的值,并将它们保存在字符串中。
所以 XML 看起来像:
<containers>
<container>
<elt3243> </elt3243>
<elt1122></elt1122>
<elt><text> Put me in a string please </text> </elt>
<elt2211></elt2211>
</container>
<container>
<elt3243><text>I would also like to be in the string</text></elt3243>
<elt1122></elt1122>
<elt> </elt>
<elt2211></elt2211>
</container>
</containers>
我想要的结果:
String result = "Put me in a string please \n I would also like to be in the string";
最好的方法是什么?
【问题讨论】:
这可能在XmlDocument
中吗?
【参考方案1】:
XDocument doc = XDocument.Load(file.FullName);
var strings = doc.Descendants("container").SelectMany(x => x.Descendants("text")).ToList();
return strings.Join(" \n ");
【讨论】:
【参考方案2】:试试这个
XDocument xDocument = new XDocument();
//load xml
StringBuilder sb = new StringBuilder();
foreach(var text in xDocument.Descendants("text") )
sb.append(text.value)
【讨论】:
【参考方案3】:这是一个 Win32 控制台示例,应该可以演示您可以做什么:
var doc = XDocument.Parse(
"<containers>" +
"<container>"+
"<elt3243> </elt3243>"+
"<elt1122></elt1122>"+
"<elt><text> Put me in a string please </text> </elt>"+
"<elt2211></elt2211>"+
"</container>"+
"<container>"+
"<elt3243><text>I would also like to be in the string</text></elt3243>"+
"<elt1122></elt1122>"+
"<elt> </elt>"+
"<elt2211></elt2211>"+
"</container>"+
"</containers>", LoadOptions.None);
var text = doc.Descendants("text").Select(x => x.Value);
Console.WriteLine(string.Join(" \n ", text));
Console.ReadKey(false);
请注意,您实际上并不需要将其投影到数组或列表中,正如一些较早的答案所表明的那样。 string.Join
只需要一个分隔符和一个对象数组; IEnumerable<string>
到数组由运行时隐式处理。要对其进行测试,请创建一个新的 C# 控制台应用程序,并将其放入 Main()。应该按原样工作...
【讨论】:
【参考方案4】:XDocument 是你的朋友...
var doc = XDocument.Load(...filename...);
var strings = doc.Descendants("text").Select(x => x.Value).ToArray();
var result = string.Join("\r\n", strings);
也许还有更简单的方法使用 ForEach 扩展方法...
【讨论】:
【参考方案5】:您可以使用 XPath,请参阅此处了解更多关于 MSDN 的信息。
所以,是这样的:
XPathDocument document = new XPathDocument(<Source of your XML >);
XPathNavigator navigator = document.CreateNavigator();
XPathNodeIterator nodes = navigator.Select("//text");
string result = "";
while (nodes.MoveNext())
result += nodes.Current.Value + "\n";
【讨论】:
以上是关于使用 XML 获取所有同名元素的内容?的主要内容,如果未能解决你的问题,请参考以下文章