2015-12-14 7 views
5

Ich versuche, JDOM2 zu verwenden, um die Informationen aus einem XML-Dokument zu extrahieren. Wie erhalte ich ein Tag innerhalb eines Tags?JDOM2 XPath Findet Knoten in einem anderen Namespace

Ich war nur teilweise erfolgreich. Während ich in der Lage gewesen bin, xpath zu verwenden, um <record> Tags zu extrahieren, hat die xpath-Abfrage, um den Titel, die Beschreibung und andere Daten mit den Record-Tags zu extrahieren, null zurückgegeben.

Ich habe Xpath erfolgreich verwendet, um <record> Tags aus dem Dokument zu extrahieren. Dazu benutze ich die folgende xpath-Abfrage: "// oai: record", wobei der "oai" -Namespace ein Namespace ist, den ich erstellt habe, um xpath zu verwenden.

können Sie das XML-Dokument sehe ich hier bin Parsen, und ich habe eine Probe unten setzen: http://memory.loc.gov/cgi-bin/oai2_0?verb=ListRecords&set=cwp&metadataPrefix=oai_dc

<record> 
    <header> 
     <identifier>oai:lcoa1.loc.gov:loc.pnp/cph.3a02293</identifier> 
     <datestamp>2009-05-27T07:22:37Z</datestamp> 
     <setSpec>cwp</setSpec> 
     <setSpec>lcphotos</setSpec> 
    </header> 
    <metadata> 
     <oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/       http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> 
      <dc:title>Jubal A. Early</dc:title> 
      <dc:description>This record contains unverified, old data from caption card.</dc:description> 
      <dc:date>[between 1860 and 1880]</dc:date> 
      <dc:type>image</dc:type> 
      <dc:type>still image</dc:type> 
      <dc:identifier>http://hdl.loc.gov/loc.pnp/cph.3a02293</dc:identifier> 
      <dc:language>eng</dc:language> 
      <dc:rights>No known restrictions on publication.</dc:rights> 
     </oai_dc:dc> 
    </metadata> 
</record> 

Wenn Sie in den größeren Dokument betrachten, werden Sie sehen, dass es nie eine „xmlns "Attribut auf einem der Tags aufgeführt. Es gibt auch die Frage, ob es im Dokument drei verschiedene Namespaces gibt ("none/oai", "oai_dc", "dc").

Was passiert ist, dass der Xpath nichts entspricht, und evaluateFirst (Eltern) gibt null zurück.

Hier ist ein Teil meines Codes, um den Titel, das Datum, die Beschreibung usw. aus dem Datensatzelement zu extrahieren.

XPathFactory xpf = XPathFactory.instance(); 
    XPathExpression<Element> xpath = xpf.compile("//dc:title", 
        Filters.element(), null, 
        namespaceList.toArray(new Namespace[namespaceList.size()])); 
    Element tag = xpath.evaluateFirst(parent); 

    if(tag != null) 
    { 
     return Option.fromString(tag.getText()); 
    } 

    return Option.none(); 

Irgendwelche Gedanken würden geschätzt werden! Vielen Dank.

+0

Gibt es hier irgendwo eine Frage? Ich verstehe nicht was du fragst? – jtahlborn

+0

Ich extrahiere den Inhalt von 'dc: title' aus' record'? – Prichmp

+0

Ich weiß nicht über jdom tho, aber vorausgesetzt, Sie haben 'dc' auf den richtigen Namespace uri' http: // purl.org/dc/elements/1.1/'gemappt, ich denke, der XPath sollte funktionieren – har07

Antwort

2

In Ihrem XML, dc Präfix auf den Namespace uri http://purl.org/dc/elements/1.1/ zugeordnet, so stellen Sie sicher, dass Sie die Namespacepräfix Zuordnung entsprechend im XPath verwendet werden. Dies ist ein Teil, wo der Namespacepräfix in Ihrem XML deklariert:

<oai_dc:dc 
    xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ 
         http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> 

XML-Parser nur der Namespace sieht explizit im XML erklärte, wird es nicht versuchen, die Namespace-URL zu öffnen, da Namespace nicht unbedingt eine URL ist . Zum Beispiel ist der folgende URI, den ich in this recent SO question gefunden habe, auch für Namespace akzeptabel: uuid:ebfd9-45-48-a9eb-42d