如何使用c#从xml文档中获取文本列表?

时间:2014-06-30 12:45:37

标签: c# xml linq linq-to-xml

我有一个XML文档,如下所示

<meta>
<field type="xs-string" name="Category">جداول</field>
<field type="struct" name="Images">
    <field type="xs-string" name="FileName">A00000002.png</field>
    <field type="xs-string" name="FileName">B00000002.png</field>
    <field type="xs-string" name="FileName">C00000002.png</field>
</field>
</meta>

我想使用XDocument将A00000002.png B00000002.png C00000002.png提取为列表。我的代码是:

var images = (from title in doc.Root.Elements("field").Where(node => node.Attribute("name").Value.Equals("Images")) select (string)title.Value);

但它只返回一个字符串,其中所有图像名称彼此相邻...任何人都知道如何获取图像名称列表,而不会将字符串分开?

5 个答案:

答案 0 :(得分:1)

你可以使用以下的分期付款代码

 var node = doc.Descendants("field").Elements("field").Select(p=>p.Value);

这样您就可以获得图像列表名称。

O / P

enter image description here

你可以像

一样使用它
 foreach (var item in node)
        {
            string value = item.ToString();
        }

答案 1 :(得分:0)

使用Split()函数获取字符串数组并在必要时将其转换为List:与您的案例相关,

string[] _arrImages = ((string)images).Split([separator])

其中separator是一个合适的分隔符char,例如('')。 如有必要,可以通过应用arrImages函数将字符串数组_ List<string>转换为_arrImages.ToList()。 RGDS,

答案 2 :(得分:0)

问题在于你没有枚举Images,而是返回它的内容,这是你显示的字符串。

试试这个:

var images = from title in doc.Root.Elements("field").Where(node => node.Attribute("name").Value.Equals("Images")).Descendants().Where( node => node.Attribute("name").Value.Equals("FileName")) select (string)title.Value;

它在第二个Where中遍历子元素。

答案 3 :(得分:0)

尝试将Regex.Split添加到您的查询结果中:

    XElement rootElement = XDocument.Load(@"YourPath").Root;

    var images = (from title in rootElement.Elements()
                .Where(node => node.Attribute("name").Value.Equals("Images"))select (string)title.Value);

    string[] GroupsItems = Regex.Split((string)images, "png");

答案 4 :(得分:0)

请尝试以下操作:

var mynode = doc.Descendants("field").Elements("field").Select(f=>f.Value);