我的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>
答案 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"]");