同じスキーマ(両方とも有効)に準拠する2つのXMLファイルがある場合、1つには名前空間があり、もう1つには名前空間がありません(サンプル)。
XMLファイル1
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="http://www.somewhere.com/X">
<messageheader>
...
</message>
XMLファイル2
<?xml version="1.0" encoding="UTF-8"?>
<ns1:message xmlns:ns1="http://www.somewhere.com/X">
<ns1:messageheader>
...
</ns1:message>
問題は、ファイルを解析するコードが、テキストコンテンツを抽出して保存する前に、Element.getNodeName()ゲッターを使用してノード名を決定することです。このメソッドは、パフォーマンスのためにXMLを解析するときにXPathではなく使用されました。
したがって、解析を行うために次のサンプルコードが実装されました。
for(int i = 0; i < someElement.getChildNodes().getLength(); i++) {
if(someElement.getChildNodes().item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element element = (Element) someElement.getChildNodes().item(i);
if(element.getNodeName().equals("ns1:messageheader")) {
...
}
...
}
}
上記のコードは、XMLファイル2でのみ機能します。
getNodeName()を使用して両方のファイルを解析できるように、ファイルが要素に名前空間プレフィックスを使用しているかどうかを判断することは可能ですか?同じコードを使用して両方のファイルを解析できますか?
これがXMLを解析するためのひどい方法であることに同意します。残念ながら、私のコードは、私が大好きなJAXBに切り替える前に実装されました(今のところ)。
ありがとう
アンデス