説明は非常に長いように見えますが、実際には非常に簡単です。
必要なもの
次のxmlドキュメントがあります
<?xml version="1.0" encoding="UTF-8"?>
<atom:feed xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:atom="http://www.w3.org/2005/Atom" type="application/atom+xml;type=feed">
<atom:link rel="self" href="http://hostname/thirdparty/playlist"/>
<atom:id>vuter id</atom:id>
<atom:title>Untitled</atom:title>
<opensearch:totalResults>249</opensearch:totalResults>
<opensearch:startIndex>1</opensearch:startIndex>
<opensearch:itemsPerPage>249</opensearch:itemsPerPage>
<atom:entry type="application/atom+xml;type=entry">
<atom:id>12345678</atom:id>
<atom:title>Playlist example 1</atom:title>
<atom:link rel="self" type="application/atom+xml;type=entry" href="http://hostname/thirdparty/playlist/2101211130000011141"/>
<dcterms:identifier>2101211130000011141</dcterms:identifier>
</atom:entry>
<atom:entry type="application/atom+xml;type=entry">
<atom:id>12345678</atom:id>
<atom:title>Playlist example 2</atom:title>
<atom:link rel="self" type="application/atom+xml;type=entry" href="http://hostname/thirdparty/playlist/2101211090000000341"/>
<dcterms:identifier>2101211090000000341</dcterms:identifier>
</atom:entry>
</atom:feed>
xml には基本的に 3 つの名前空間が含まれていることに注意してください。
- アトム: http://www.w3.org/2005/Atom
- dcterms : http://purl.org/dc/terms/
- オープンサーチ: http://a9.com/-/spec/opensearch/1.1/
ここで、単一のatom:entryノードの別の xml ドキュメントを生成する必要があります。以下のように
<atom:entry type="application/atom+xml;type=entry" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:atom="http://www.w3.org/2005/Atom">
<atom:id>12345678</atom:id>
<atom:title>Playlist example 1</atom:title>
<atom:link rel="self" type="application/atom+xml;type=entry" href="http://hostname/thirdparty/playlist/2101211130000011141"/>
<dcterms:identifier>2101211130000011141</dcterms:identifier>
</atom:entry>
私が得ているもの
私はXOMを使用していますが、これまで試してみました
Element rootElem = new Builder().build(ins).getRootElement();
xc = XPathContext.makeNamespaceContext(rootElem);
Element firstEntry = (Element) rootElem.query("atom:entry", xc).get(0);
Document doc = new Document((Element)firstEntry.copy());
System.out.println(doc.toXML());
そして、名前空間宣言が1つだけの次のxmlを取得しています。以下のように。
<?xml version="1.0"?>
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" type="application/atom+xml;type=entry">
<atom:id>12345678</atom:id>
<atom:title>Playlist example 1</atom:title>
<atom:link rel="self" type="application/atom+xml;type=entry" href="http://hostname/thirdparty/playlist/2101211130000011141" />
<dcterms:identifier xmlns:dcterms="http://purl.org/dc/terms/">2101211130000011141</dcterms:identifier>
</atom:entry>
問題
Atom名前空間のみが含まれています:(したがって、有効なXMLではありません。名前空間が欠落している子ノードdcterms:identifierがあるためです。
この問題から抜け出すには、ひどく助けが必要です。どんな助けも楽しみにしています。