如何在XML文档中获取与标记名称分隔的值逗号

时间:2018-08-31 06:59:05

标签: c# xml

我有以下格式的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");

但无法实现,有什么建议吗?

3 个答案:

答案 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