2015-01-22 2 views
1

У меня есть требование извлечь значение ниже.Соответствующее выражение Xpath дает два значения строк

<cidx:ReferenceInformation ReferenceType="DeliveryNoteNumber"> 
        <cidx:DocumentReference> 
         <cidx:DocumentIdentifier>5004330471</cidx:DocumentIdentifier> 
        </cidx:DocumentReference> 
       </cidx:ReferenceInformation> 

Я использую приведенное ниже выражение Xpath и получаю 2 значения.

Expression

/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ShipNotice']/*[local-name()='ShipNoticeBody']/*[local-name()='ShipNoticeProperties']/*[local-name()='ReferenceInformation']/*[local-name()='DocumentReference']/*[local-name()='DocumentIdentifier']/text() 

Выход

<?xml version="1.0" encoding="UTF-8"?> 
<result> 
5004330471 
0803692106 
</result> 

Я проверил Xpath в онлайн-инструмент [http://www.xpathtester.com/xpath][1]

Ниже ВХОДА XML

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP:Header/> 
<SOAP:Body> 
    <cidx:ShipNotice xmlns:cidx="urn:cidx:names:specification:ces:schema:all:4:0" Version="4.0"> 
     <cidx:Header> 
      <cidx:ThisDocumentIdentifier> 
       <cidx:DocumentIdentifier>0000001113658104</cidx:DocumentIdentifier> 
      </cidx:ThisDocumentIdentifier> 
      <cidx:ThisDocumentDateTime> 
       <cidx:DateTime DateTimeQualifier="On">2015-01-22T20:15:35Z</cidx:DateTime> 
      </cidx:ThisDocumentDateTime> 
      <cidx:From> 
       <cidx:PartnerInformation> 
        <cidx:PartnerName>MOS Company</cidx:PartnerName> 
        <cidx:PartnerIdentifier Agency="AGIIS-EBID">1234567890123</cidx:PartnerIdentifier> 
        <cidx:AddressInformation> 
         <cidx:AddressLine>N. Lindbergh</cidx:AddressLine> 
         <cidx:CityName>Columbia</cidx:CityName> 
         <cidx:StateOrProvince>MO</cidx:StateOrProvince> 
         <cidx:PostalCode>63190</cidx:PostalCode> 
         <cidx:PostalCountry>US</cidx:PostalCountry> 
        </cidx:AddressInformation> 
       </cidx:PartnerInformation> 
      </cidx:From> 
      <cidx:To> 
       <cidx:PartnerInformation> 
        <cidx:PartnerName> DIV BOWLNG GR VERA</cidx:PartnerName> 
        <cidx:PartnerIdentifier Agency="AssignedByPapiNet">0001664057</cidx:PartnerIdentifier> 
        <cidx:ContactInformation> 
         <cidx:ContactName>2015</cidx:ContactName> 
         <cidx:ContactDescription>SeedYear</cidx:ContactDescription> 
        </cidx:ContactInformation> 
        <cidx:ContactInformation> 
         <cidx:ContactName>1024122440000</cidx:ContactName> 
         <cidx:ContactDescription>AGIIS-EBID</cidx:ContactDescription> 
        </cidx:ContactInformation> 
        <cidx:AddressInformation> 
         <cidx:AddressLine>17410 PIKE 291</cidx:AddressLine> 
         <cidx:CityName>BOWLING GREEN</cidx:CityName> 
         <cidx:StateOrProvince>MO</cidx:StateOrProvince> 
         <cidx:PostalCode>633343045</cidx:PostalCode> 
         <cidx:PostalCountry>US</cidx:PostalCountry> 
        </cidx:AddressInformation> 
       </cidx:PartnerInformation> 
      </cidx:To> 
     </cidx:Header> 
     <cidx:ShipNoticeBody> 
      <cidx:ShipNoticeProperties> 
       <cidx:ShipmentIdentification> 
        <cidx:DocumentReference> 
         <cidx:DocumentIdentifier>0803692106</cidx:DocumentIdentifier> 
        </cidx:DocumentReference> 
       </cidx:ShipmentIdentification> 
       <cidx:ShipDate> 
        <cidx:DateTime DateTimeQualifier="On">2015-01-22T00:00:00Z</cidx:DateTime> 
       </cidx:ShipDate> 
       <cidx:PurchaseOrderInformation> 
        <cidx:DocumentReference> 
         <cidx:DocumentIdentifier>PO8956234</cidx:DocumentIdentifier> 
         <cidx:ReferenceItem>000530</cidx:ReferenceItem> 
        </cidx:DocumentReference> 
       </cidx:PurchaseOrderInformation> 
       <cidx:TransportMethodCode Domain="UN-Rec-19">3</cidx:TransportMethodCode> 
       <cidx:ReferenceInformation ReferenceType="DeliveryNoteNumber"> 
        <cidx:DocumentReference> 
         <cidx:DocumentIdentifier>5004330471</cidx:DocumentIdentifier> 
        </cidx:DocumentReference> 
       </cidx:ReferenceInformation> 
       <cidx:ReferenceInformation ReferenceType="BillOfLadingNumber"> 
        <cidx:DocumentReference> 
         <cidx:DocumentIdentifier>0803692106</cidx:DocumentIdentifier> 
        </cidx:DocumentReference> 
       </cidx:ReferenceInformation> 
       <cidx:ShipNoticeDate> 
        <cidx:DateTime DateTimeQualifier="On">2015-01-22T20:15:35Z</cidx:DateTime> 
       </cidx:ShipNoticeDate> 
      </cidx:ShipNoticeProperties> 
     </cidx:ShipNoticeBody> 
    </cidx:ShipNotice> 
</SOAP:Body> 
</SOAP:Envelope> 

Может кто-нибудь посоветует, как получить только эту стоимость?

<cidx:DocumentIdentifier>5004330471</cidx:DocumentIdentifier> 

ответ

0

Похоже, вы должны проверить атрибут ReferenceType в cidx:ReferenceInformation элемента:

/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ShipNotice']/*[local-name()='ShipNoticeBody']/*[local-name()='ShipNoticeProperties']/*[local-name()='ReferenceInformation' and @ReferenceType='DeliveryNoteNumber']/*[local-name()='DocumentReference']/*[local-name()='DocumentIdentifier'] 

Примечание: XPath могут быть очищены много, если вы можете объявить пространство имен и использовать префиксы в пути ,

Вы также можете очистить его с помощью * для префикса, если вы используете XPath 2.0 ...

/*:Envelope/*:Body/*:ShipNotice/*:ShipNoticeBody/*:ShipNoticeProperties/*:ReferenceInformation[@ReferenceType='DeliveryNoteNumber']/*:DocumentReference/*:DocumentIdentifier 
+0

@thanks Тима так Пространство имен сохранить изменения, поэтому я использую [локальное имя() = '']. Есть ли лучший способ сделать, кроме использования локального имени? –

+0

@Kumar_y - см. Мое редактирование для альтернативы 'local-name()' (если вы можете использовать XPath 2.0). –

+0

Спасибо за объяснение Даниэля. Я думаю, что Xpath 2.0 может не поддерживаться, поэтому local-name - это путь в Xpath 1.0. –

Смежные вопросы