2017-12-29 36 views
-1

私は、XMLノード名XPathのローカル名()

searchElementsXml = new String[]{"name", "id", "version", "description", "keywords", "authorInfos/authorInfo/name", "status"}; 

の配列を持っている私は、ローカル名を使用して、オンラインでの名前空間接頭辞を避けるために、解決策を見つけました。私はまた私の配列要素「authorInfos/authorInfo /名前」を使用することができますので、私は式の文字列を向上させることができますどのように

expression = "//*[local-name()=" + searchElementsXml[j] +"]/childnode"; 

私の現在のソリューション原因「/ authorInfo /名前は」]

答えて

0

後ろに最善の解決策である必要があり、動作しないようですが、単純なNamespaceContextの実装を作成し、あなたのXPath式に修飾名を置くことです。

しかし、あなたが本当にそれをこのようにやっておきたい場合は、独自のローカル名()テストとして階層内の各要素名を追加することによって、XPath式を行うことができます。

StringBuilder exprBuilder = new StringBuilder("//"); 

for (String element : searchElementsXml[j].split("/")) { 
    exprBuilder.append("*[local-name()='" + element + "']/"); 
} 

exprBuilder.append("childnode"); 

expression = exprBuilder.toString(); 
関連する問題