XML读取特定属性

时间:2017-10-01 22:27:54

标签: c# xml attributes

我正在尝试创建一个允许其用户编辑xml文件的小应用程序。

我得到了这样的XML文件:

<item id="1" name="item_01">
    <property name="Meshfile" value="path_to_mesh_file" />
    <property name="Material" value="organic" />
    <property name="HoldType" value="23" />
    <property name="Stacknumber" value="50" /></property>
</item>
<item id="2" name="item_02">
    <property name="Meshfile" value="path_to_mesh_file" />
    <property name="Material" value="organic" />
    <property name="HoldType" value="23" />
    <property name="Stacknumber" value="50" /></property>
</item>
<item id="3" name="item_03">
    <property name="Meshfile" value="path_to_mesh_file" />
    <property name="Material" value="organic" />
    <property name="HoldType" value="23" />
    <property name="Stacknumber" value="50" /></property>
</item>
<item id="4" name="item_04">
    <property name="Meshfile" value="path_to_mesh_file" />
    <property name="Material" value="organic" />
    <property name="HoldType" value="23" />
    <property name="Stacknumber" value="50" /></property>
</item>

但是我需要在每个网格文件的VALUE中加入组合框,但是我不确定如何。

1 个答案:

答案 0 :(得分:0)

您发布的xml有额外标记,必须删除。发布的xml格式不正确,所以我不得不读作片段。见下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;

            XmlReader reader = XmlReader.Create(FILENAME, settings);

            List<string> meshFiles = new List<string>();
            while (!reader.EOF)
            {
                if (reader.Name != "property")
                {
                    reader.ReadToFollowing("property");
                }
                if (!reader.EOF)
                {
                    XElement property = (XElement)XElement.ReadFrom(reader);
                    if ((string)property.Attribute("name") == "Meshfile")
                    {
                        meshFiles.Add((string)property.Attribute("value"));
                    }
                }
            }
        }
    }
}