2016-09-02 51 views
0

我試圖從屬性值爲「id = x」的XElement中通過XML響應中的某些節點檢索值。從屬性具有特定值的XML代碼獲取值[使用XElement]

這就是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> 

這是我現在使用(工作)的代碼,但我寧願用「身份證」檢索值場=「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

我會使用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; 
0

使用XPath作爲@ L.B。提示。

如果你正在使用Visual Studio,有一項你真正可以幫助你找到一個給定的元素或屬性的XPath的,讓你用自己的方式寫了一個插件:XPath Information