2016-09-02 4 views
0

Ich versuche, Werte von bestimmten Knoten in einer XML-Antwort mithilfe von XElement abzurufen, wobei der Attributwert "id = x" lautet.Wert aus XML-Code erhalten, wo Attribut einen bestimmten Wert hat [mithilfe von XElement]

So sieht die XML-Antwort aus.

<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> 

Dies ist der Code ich jetzt benutze (was funktioniert), aber ich würde lieber Werte mit „id“ für Feld abrufen = „5“ anstatt die durch einen Abkömmling Index abgerufenen Wert haben .

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); 

Vielen Dank für

Antwort

0

würde ich XPath

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

oder

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

Linq2Xml verwenden ist ebenfalls möglich

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

Verwenden Sie XPath als @ L.B. schlägt vor.

Wenn Sie Visual Studio dort verwenden ist ein Plugin von Ihnen wirklich geschrieben, die Sie den XPath eines bestimmten Elements oder Attributs helfen können, finden Sie auf Ihrem Weg zu bekommen: XPath Information

Verwandte Themen