我有以下格式的Xml文档,
<Fields>
<Field Name="A">
<DataField>A</DataField>
<Value>"AA"</Value>
</Field>
<Field Name="B">
<DataField>B</DataField>
<Value>"BB"</Value>
</Field>
</Fields>
我只想获取以逗号分隔的标签值,例如AA,BB,.. etc。
我尝试过:
xmlFile.Root.Elements("Fields").Elements("Field").Elements("Value");
但无法实现,有什么建议吗?
答案 0 :(得分:2)
尽管您的根元素是 Fields
,但是您获得的代码已经检索了一系列元素,因此您不应该从< / em>根。之后,您只需要将这些元素的值连接在一起即可。为此,我会使用Fields
:
string.Join
(Samvel使用using System;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
XDocument doc = XDocument.Load("test.xml");
var values = doc.Root
.Elements("Field")
.Elements("Value")
.Select(x => x.Value);
string joined = string.Join(",", values);
Console.WriteLine(joined);
}
}
进行连接的方法也很好,但是我发现Aggregate
更易于理解。对于许多元素来说,效率也更高,但这可能无关紧要,如有必要,可以使用string.Join
进行修复。)
答案 1 :(得分:1)
我对您的xml做了一些修改:
<Fields>
<Field Name="A">
<DataField>A</DataField>
<Value>AA</Value>
</Field>
<Field Name="B">
<DataField>B</DataField>
<Value>BB</Value>
</Field>
</Fields>
下面是一个简短示例,说明如何使用Linq to XML
using System;
using System.Linq;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApp3
{
public class Program
{
static void Main(string[] args)
{
using (TextReader tr = new StreamReader(@"C:\Users\Admin\Desktop\test.xml"))
{
XDocument document = XDocument.Load(tr);
var allDescendants = document.Descendants("Value");
Console.WriteLine(allDescendants.Select(x=>x.Value).Aggregate((x,y)=> x+","+y));
}
}
}
}
答案 2 :(得分:0)
如果您想使用x[cut(y, breaks = x, labels = FALSE)]
#[1] 1 5 17
和一点XmlDocument
XPath