特定のXMLファイルからすべての名前空間情報を取得できるようにしたい。
たとえば、入力XMLファイルが次のようなものである場合:
<ns1:create xmlns:ns1="http://predic8.com/wsdl/material/ArticleService/1/">
<ns1:article xmlns:ns1="xmlns:ns1='http://predic8.com/material/1/">
<ns1:id>1</ns1:id>
<description>bar</description>
<name>foo</name>
<ns1:price>
<amount>00.00</amount>
<currency>USD</currency>
</ns1:price>
<ns1:price>
<amount>11.11</amount>
<currency>AUD</currency>
</ns1:price>
</ns1:article>
<ns1:article xmlns:ns1="xmlns:ns1='http://predic8.com/material/1/">
<ns1:id>2</ns1:id>
<description>some name</description>
<name>some description</name>
<ns1:price>
<amount>00.01</amount>
<currency>USD</currency>
</ns1:price>
</ns1:article>
</ns1:create>
次のような出力を期待したいと思います(この場合はコンマ区切り):
create, ns1, http://predic8.com/wsdl/material/ArticleService/1/
article, ns1, http://predic8.com/material/1/
price, ns1, http://predic8.com/material/1/
id, ns1, http://predic8.com/material/1/
重要な注意事項:
特定の名前空間内で定義されているが、その定義が上位ノードで定義されている可能性があるサブノードも考慮することが重要です。たとえば、ノードを取得したい場合はns1:id
、親ノードまでさかのぼってns1:article
名前空間のURLが次のようになっていることを確認する必要があります。xmlns:ns1='http://predic8.com/material/1/
私はJavaで実装しているので、Javaベースのソリューションでも、XSLTベースのソリューションでも適切と思われるかもしれません。