C#使用XML中的name属性获取数据

时间:2014-07-07 14:02:01

标签: c# xml

我的xml文档中有一些字段具有相同的值但名称不同。我想在这个xml文档中选择“Error”的值,因此想要显示“deger2”。另外我想显示“deger5”我该怎么做?

<?xml version="1.0" encoding="UTF-8"?>
<Database xmlns="http://www.example.com/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Datas>
  <Data name="sMsg" access="private" xsi:type="collection" type="string">
     <Value key="Cycle" value="deger1" />
     <Value key="Error" value="deger2" />
     <Value key="Info" value="deger3" />
     <Value key="Jog" />
     <Value key="Warning" />
  </Data>
  <Data name="tTabla" access="private" xsi:type="array" type="tabla" size="1">
     <Value key="Cycle" value="deger4" />
     <Value key="Error" value="deger5" />
     <Value key="Info" value="deger6" />
     <Value key="Jog" />
     <Value key="Warning" />
  </Data>
 </Datas>
</Database>

2 个答案:

答案 0 :(得分:2)

您应该将xml命名空间置于considiration中。使用Linq to Xml

var xDoc = XDocument.Parse(xmlstring); //XDocument.Load(filename)
XNamespace ns = "http://www.example.com/2";

var errors = xDoc.Descendants(ns + "Value") //<-- See the usage of ns
                .Where(d => (string)d.Attribute("key") == "Error")
                .Select(d => (string)d.Attribute("value"))
                .ToList();

修改

  

有没有办法选择这样:选择错误值,其中数据名称=“tTabla”?

var errors = xDoc.Descendants(ns + "Data")
                .First(d => (string)d.Attribute("name") == "tTabla")
                .Descendants(ns + "Value") 
                .First(d => (string)d.Attribute("key") == "Error")
                .Attribute("value")
                .Value;

<强> EDIT2

您也可以使用XPATH

var nsmgr = new XmlNamespaceManager(xDoc.CreateNavigator().NameTable);
nsmgr.AddNamespace("ns", "http://www.example.com/2");

var errors = xDoc.XPathSelectElement("//ns:Data[@name='tTabla']/ns:Value[@key='Error']", nsmgr)
                    .Attribute("value")
                    .Value;

答案 1 :(得分:0)

U也可以使用XPath来选择它们:

XmlNodeList nodeList = root.SelectNodes("//Data/Value[@key="Error"]");