我试图通过使用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);
感谢
答案 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