Sto tentando di utilizzare JDOM2 per estrarre le informazioni che mi interessano da un documento XML. Come posso ottenere un tag all'interno di un tag?JDOM2 xpath che trova nodi in uno spazio dei nomi diverso
Ho avuto solo parzialmente successo. Mentre sono stato in grado di usare xpath per estrarre i tag <record>
, la query xpath per estrarre il titolo, la descrizione e altri dati con i tag record ha restituito null.
Ho utilizzato Xpath correttamente per estrarre i tag <record>
dal documento. Per fare questo uso la query follpath xpath: "// oai: record" dove lo spazio dei nomi "oai" è uno spazio dei nomi che ho inventato per usare xpath.
È possibile visualizzare il documento XML che sto analisi qui, e ho messo un esempio riportato di seguito: 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>
Se si guarda nel documento più grande si vedrà che non c'è mai un "xmlns "attributo elencato su uno qualsiasi dei tag. C'è anche il problema che ci sono tre diversi namespace nel documento ("none/oai", "oai_dc", "dc").
Che cosa sta succedendo è che xpath non corrisponde a nulla e valutare Primo (padre) restituisce null.
Ecco alcuni dei miei codici per estrarre il titolo, la data, la descrizione ecc. Dall'elemento del record.
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();
Ogni pensiero sarebbe apprezzato! Grazie.
c'è una domanda qui da qualche parte? non capisco cosa stai chiedendo? – jtahlborn
Estraggo il contenuto di 'dc: title' da' record'? – Prichmp
Non conosco jdom tho, ma partendo dal presupposto che hai mappato 'dc' nello spazio dei nomi corretto uri' http: // purl.org/dc/elements/1.1/', penso che XPath dovrebbe funzionare – har07