2016-08-03 27 views
0

ich einen XPath-Ausdruck müssen von XML folgende Beispielskript nur spezifischen Werte von BalanceResult Attribut abzurufen:XPath-Ausdruck alle Kind-Knotens Wert abzurufen nur

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <ars:QueryBalanceResultMsg xmlns:ars="http://www.huawei.com/bme/cbsinterface/arservices" xmlns:arc="http://cbs.huawei.com/ar/wsservice/arcommon" xmlns:cbs="http://www.huawei.com/bme/cbsinterface/cbscommon"> 
     <QueryBalanceResult> 
      <ars:AcctList> 
       <ars:BalanceResult> 
        <arc:BalanceType>C_MAIN_ACCOUNT</arc:BalanceType> 
        <arc:BalanceTypeName>MainAccount</arc:BalanceTypeName> 
        <arc:TotalAmount>80000</arc:TotalAmount> 
        <arc:BalanceDetail> 
         <arc:BalanceInstanceID>702000000000008916</arc:BalanceInstanceID> 
         <arc:EffectiveTime>20160803080942</arc:EffectiveTime> 
         <arc:ExpireTime>20370101010000</arc:ExpireTime> 
        </arc:BalanceDetail> 
       </ars:BalanceResult> 
       <ars:BalanceResult> 
        <arc:BalanceType>C_Bonus_Account</arc:BalanceType> 
        <arc:BalanceTypeName>Bonus Balance Account</arc:BalanceTypeName> 
        <arc:TotalAmount>3900</arc:TotalAmount> 
        <arc:BalanceDetail> 
         <arc:BalanceInstanceID>702000000000008543</arc:BalanceInstanceID> 
         <arc:EffectiveTime>20160803082506</arc:EffectiveTime> 
         <arc:ExpireTime>20191211121212</arc:ExpireTime> 
        </arc:BalanceDetail> 
       </ars:BalanceResult> 
       ....... 
      </ars:AcctList> 
     </QueryBalanceResult> 
    </ars:QueryBalanceResultMsg> 
</soapenv:Body> 

Derart, dass mein Ausdruck gibt etwas zurück:

C_MAIN_ACCOUNT, 80000, 20370101010000, C_Bonus_Account, 3900, 20191211121212, ... Vorlage für oben: (Bogen: BalanceType, Bogen: TotalAmount, Bogen: ExpireTime)

Unter Ausdruck gibt alles einschließlich der Tags zurück - nicht benötigt.

//*[local-name()='BalanceResult'][*[local-name()='BalanceType']] 

Auch da könnte es eine Anzahl von n BalanceResult Attributen (in obigem Beispiel, seine 2) sein, ich bin nicht in der Lage mit einer Lösung zu kommen.

Vielen Dank für Ihre Hilfe!

Antwort

2

Was:

//BalanceResult/descendant::*[local-name() = 'BalanceType' or local-name() = 'TotalAmount' or local-name() = 'ExpireTime'] 

Daraus ergibt sich:

<BalanceType>C_MAIN_ACCOUNT</BalanceType> 
<TotalAmount>80000</TotalAmount> 
<ExpireTime>20370101010000</ExpireTime> 
<BalanceType>C_Bonus_Account</BalanceType> 
<TotalAmount>3900</TotalAmount> 
<ExpireTime>20191211121212</ExpireTime> 

Bitte beachte, dass ich die Namespaces aus Ihrem Beispiel entfernt.