Я пытаюсь использовать JDOM2 для извлечения информации, о которой я беспокоюсь из XML-документа. Как получить тег в теге?JDOM2 xpath для нахождения узлов в другом пространстве имен
Я был только частично успешным. Хотя мне удалось использовать xpath для извлечения тегов <record>
, запрос xpath для извлечения заголовка, описания и других данных в тегах записей возвращал значение null.
Я успешно использовал Xpath для извлечения <record>
тегов из документа. Для этого я использую следующий запрос xpath: «// oai: record», где пространство имен «oai» - это пространство имен, которое я создал, чтобы использовать xpath.
Вы можете увидеть документ XML я разбор здесь, и я поместил образец ниже: 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>
Если смотреть в более широком документе вы увидите, что там никогда не бывает «XMLNS атрибут, указанный в любом из тегов. Также существует вопрос о наличии в документе трех разных пространств имен («none/oai», «oai_dc», «dc»).
Что происходит, так это то, что xpath ничего не соответствует, а метод вычисленияFirst (parent) возвращает значение null.
Вот некоторые из моего кода, чтобы извлечь название, дату, описание и т. Д. Из элемента записи.
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();
Любые мысли будут оценены! Благодарю.
есть ли здесь вопрос? Я не понимаю, о чем вы спрашиваете? – jtahlborn
Я извлекаю содержимое 'dc: title' из' record'? – Prichmp
Я не знаю о jdom tho, но при условии, что вы сопоставили 'dc' с правильным пространством имен uri' http: // purl.org/dc/elements/1.1/', я думаю, что XPath должен работать – har07