我有这个xml代码:
<Turn>
<Entry type="TurnIn" msgId="124312">
<field tag="35" val="D"/>
<field tag="34" val="003694"/>
<field tag="43" val="20140916-01:29:07"/>
</Entry>
<Entry type="Van" msgId="234325">
<field tag="35" val="8"/>
<field tag="34" val="005046"/>
<field tag="43" val="20140916-01:31:17"/>
</Entry>
<Entry type="fired" msgId="124864">
<field tag="35" val="8"/>
<field tag="34" val="005049"/>
<field tag="43" val="20140916-01:34:49"/>
</Entry>
<Entry type="fired" msgId="134864">
<field tag="35" val="8"/>
<field tag="34" val="006324"/>
<field tag="43" val="20140916-01:35:20"/>
</Entry>
</Turn>
对于C#。
我需要获得val,其中Entry,type =&#34; fired&#34;和字段,标签= 34和43在列表中。我已经尝试过多次使用类XmlReader和Linq到XMl。我不知道如何将一个属性与同一元素中另一个属性的值进行比较。
答案 0 :(得分:0)
使用XPathDocument
(请参阅http://support.microsoft.com/kb/308333)和XPath查询(如
//Turn/Entry[@type='fired']/field[@tag=34|@tag=43]@val
答案 1 :(得分:0)
这可以使用Linq to XML完成,如下所示
XDocument xDoc = XDocument.Parse(yourXMLString);
//XDocument xDoc = XDocument.Load(yourXMLFilePath);
var res = xDoc.Descendants("Entry")
.Where(x => x.Attribute("type").Value == "fired")
.Elements("field")
.Where(y => y.Attribute("tag").Value == "34" || y.Attribute("tag").Value == "43")
.Select(a => a.Attribute("val").Value);