从XML代码中获取值,其中属性具有特定值[使用XElement]

时间:2016-09-02 22:21:12

标签: c# .net xml

我试图通过使用XElement从XML响应中的某些节点检索值,其中属性值为“id = x”。

这就是XML响应的样子。

<customfields>
<group id="6" title="Help Desk Ticket Categories" displayorder="1">
<field id="73" title="Second level classification" type="6" name="zscyz3a30h1q"><![CDATA[-- unassigned --]]></field>
</group>
<group id="9" title="For CS" displayorder="4">
<field id="82" title="CS Root Cause Classification " type="6" name="pye19ntzyp8v"><![CDATA[--Unassigned--]]></field>
<field id="84" title="Staff Responsible" type="6" name="7gy8bfu8tidv"><![CDATA[-- unassigned --]]></field>
<field id="93" title="Customer Package" type="6" name="fxk9rqtlw0fa"><![CDATA[--Unassigned--]]></field>
</group>
<group id="2" title="Client Info" displayorder="3">
<field id="5" title="Customer Name" type="1" name="77004d0323"><![CDATA[BigG]]></field>
<field id="17" title="Account Number" type="1" name="d1abccc1a0" /><![CDATA[123]]></field>
<field id="16" title="Contact Name" type="1" name="93d2b9adf1" /><![CDATA[george]]></field>
<field id="13" title="Phone No." type="1" name="0aa31be4b8" /><![CDATA[456]]></field>
</group>
</customfields>

这是我现在正在使用的代码(有效),但我宁愿用“id”=“5”检索字段的值,而不是通过后代检索值索引。

    XElement root = XElement.Parse(GetTicketCustomFields(ticketID));
    kCustomer = (string)(from el in root.Descendants("field") select el).ElementAt(4);
    kAccountNumber = (string)(from el in root.Descendants("field") select el).ElementAt(5);
    kName = (string)(from el in root.Descendants("field") select el).ElementAt(6);
    kPhone = (string)(from el in root.Descendants("field") select el).ElementAt(7);

感谢

2 个答案:

答案 0 :(得分:0)

我会使用XPath

var root = XDocument.Parse(xmlstring);
var accountNumber = root.XPathSelectElement("//field[@id='17']").Value;

var accountNumber = root.XPathSelectElement("//field[@title='Account Number']").Value;

也可以使用Linq2Xml

var accountNumber =  root.Descendants("field")
                    .FirstOrDefault(F => F.Attribute("id").Value == "17")
                    .Value;

答案 1 :(得分:0)

将XPath用作@ L.B.建议。

如果您正在使用Visual Studio,那么您自己编写的插件可以帮助您找到给定元素或属性的XPath,以帮助您顺利完成:XPath Information