使用LINQ to XML获取自定义属性值

时间:2014-08-21 11:14:27

标签: c# xml linq

我正在写一个XML文件,我以后会从中检索数据。

以下是我写信息的方式。

  XNamespace testNM = "urn:lst-emp:emp";
                XDocument xDoc;
                string path = "project_data.xml";
                if (!File.Exists(path))
                {
                    xDoc = new XDocument(
                               new XDeclaration("1.0", "UTF-16", null),
                               new XElement(testNM + "Test")
                               );
                }
                else
                {
                    xDoc = XDocument.Load(path);
                }

                var element = new XElement("key",
                        new XAttribute("name", key),
                        new XElement("Type", type),
                        new XElement("Value", value));

                xDoc.Element(testNM + "Test").Add(element);

                // Save to Disk
                xDoc.Save(path);

这就是我的XML文件在写入数据后的样子。

<?xml version="1.0" encoding="utf-16"?>
<Test xmlns="urn:lst-emp:emp">
  <key name="key2" xmlns="">
    <Type>int</Type>
    <Value>12312</Value>
  </key>
  <key name="key3" xmlns="">
    <Type>String</Type>
    <Value>asdfasd</Value>
  </key>
</Test>

现在,最简单的方法是获取name属性值(在这种情况下为 key2 key3 )以及TypeValue属性值。

1 个答案:

答案 0 :(得分:1)

加载文档;

XDocument doc = XDocument.Load(@"doc.xml");

循环key节点读取您需要的内容;

foreach (var keyNode in doc.Root.Elements("key"))
{
    var name = keyNode.Attribute("name");
    var type = (string)keyNode.Element("Type"); // or .value to throw if there is no node
    ...
}