C# ParseXML如何比较同一元素中的一个属性和另一个属性的值

C# ParseXML如何比较同一元素中的一个属性和另一个属性的值,c#,linq,xml-parsing,linq-to-xml,parsexml,C#,Linq,Xml Parsing,Linq To Xml,Parsexml,我有以下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=

我有以下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,其中条目type=“fired”和字段tag=34和43。我曾多次尝试使用XmlReader类和LINQtoXML。我不知道如何将同一元素中的一个属性与另一个属性的值进行比较。

使用
XPathDocument
(请参阅)和类似的XPath查询

//Turn/Entry[@type='fired']/field[@tag=34|@tag=43]@val

这可以使用Linq到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);

您不也需要在特定日期进行筛选吗。。?或者您想返回type=fired且field标记包含35和43的所有节点。。。?听起来您可以使用
XPATH
来完成一些事情。您希望值如何?所有值都捆绑在一个集合中,而不引用父元素,或者集合中的每个值都引用父元素?这两个答案都是正确的。我不尝试使用XPath,但我认为这个句子应该是正确的,谢谢