2016-04-07 11 views
0

Ich muss den Text "testpoc" aus dem XML unten extrahieren. Bitte helfen Sie mir, indem Sie den entsprechenden xpath für das gleiche bereitstellen.Bewerten Xpath-Ausdruck mit local-name() -Funktion, wenn Xml Namespaces und mehrere Tags hat

   '<am:entry>` `  
    `    <am:content type="application/xml">` 
        `<s:series-poc>` 
         '<s:c_series.c_id>testpoc</s:c_series.c_id>' 
        </s:series-poc>      
        </am:content> 
       </am:entry> 

Ich habe versucht, die folgenden Pfade, aber kein Glück.

a) ("// * [local-name() = 'c_series.c_id']/text()"),

b) ("/ entry/content/Serien-POC/c_series. C_Id/text() "),

c) ("/entry/content/Serien-PoC // * [local-name() = 'c_series.c_id']/text() ")

Danke für all Ihre Unterstützung in dieser Hinsicht.

Antwort

0

Ihre XPath API eine Möglichkeit zur Bindung eines Namespacepräfix an einen URI, zum Beispiel

XPath.declareNamespace("am", "http://something.com/"); 
XPath.declareNamespace("s", "http://something.else.com/"); 

Sie können dann wählen Sie den Inhalt als

/am:entry/am:content/s:c_series.c_id 

Prädikate unter Berufung auf local-name() sind ein letzter bieten sollte resort, wenn Sie auf diese Weise keine Präfixe binden können.

Welche API verwenden Sie?

+0

Hallo Michael, danke für deine schnelle Antwort. Ich habe meine Namespaces und das gesamte XML gepostet. Ich habe auch den Code gepostet, den ich versuche, meinen xpath zu formulieren, jedoch kein Glück beim Extrahieren des entsprechenden Textes. –

0

Sie die Details Providing, überprüfen Sie auch die xml unten -

verwendet Namespaces: xmlns: c = "http://iddn.abc.com/ns/core" xmlns: f = "http: //iddn.abc.com/ns/fields "xmlns: a =" http://iddn.abc.com/ns/assets "xmlns: s =" http://iddn.abc.com/ns/search " >

 <atom:entry> 
     <atom:content type="application/vnd"> 
      <s:series-item-abc-poc> 
      <s:c_series.c_id>testpoc</s:c_series.c_id> 
      </s:series-item-abc-poc> 
     </atom:content> 
    </atom:entry> 

habe ich versucht, die Namensräume zu erklären, wie Sie vorgeschlagen, aber ich war nicht in der Lage, den Wert für s zu holen: c_series.c_id Tag. Das habe ich gemacht -

xpath = XPathFactory.newInstance(). NewXPath();

XPath.declareNamespace ("s", "http://iddn.abc.com/ns/search");

expr = xpath.compile ("// atom: eintrag/atom: inhalt/s: serie-item-abc-poc/s: c_series.c_id/text()");

Lassen Sie mich wissen, falls ich hier etwas vermisse.

Vielen Dank für Ihre Unterstützung auf diesem.

+0

Hinweis: Diese Antwort bietet eine Lösung für den Fall, dass der XPath-Ausdruck von einer Java-Anwendung mit der JAXP-API ausgeführt wird. Es gibt nichts in der Frage zu sagen, dass dies die Programmiersprache oder API ist, die das OP verwendet. Ich habe das OP um Details der API gebeten, aber es scheint, dass sie die Frage nicht verstanden haben. –

+0

Bitte ignorieren Sie den vorherigen Kommentar: Ich habe es falsch gelesen Ihre "Antwort" nicht zu erkennen, es war eigentlich eine Ergänzung zu der Frage. Diese "Antwort" sollte eine Bearbeitung der ursprünglichen Frage sein. Es schlägt vor, dass die von Ihnen verwendete API die Java JAXP API ist.Sie verwenden den richtigen Ansatz, aber natürlich müssen Sie sowohl den Namespace "atom" als auch den Namespace "s" deklarieren. Wenn Ihr Versuch, das Problem zu lösen, fehlschlägt, informieren Sie sich genauer darüber, wie es scheitert. –