0

私はxml.jcabi xmlライブラリを使い始めました。単純なライブラリのように見えますが、xmlns 名前空間が設定されている場合、ノードを照会できません。

ここに私のxmlファイルがあります:

<MyRequestData xmlns='http://www.myaddress.com/myfile.xsd' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
  <RequestData>
    <startDate>2016-03-25</startDate>
    <endDate>2016-03-25</endDate>
  </RequestData>
</MyRequestData>

そして、私の Java コードは次のようになります。

XML xmlRequest = new XMLDocument(requestFileIS);
xmlRequest.registerNs("xmlns", "http://www.myaddress.com/myfile.xsd");    
for (XML requestData : xmlAdHocRequest.nodes("//xmlns:RequestData")) 
{
    String startDate = requestData.xpath("startDate/text()").get(0);
}

私の問題は、ゼロノードをxmlAdHocRequest.nodes("//xmlns:RequestData")返すことです。XML ファイルと (明らかに) NS レジスタから既定の名前空間を削除すると、クエリは機能します。

また、プレフィックスを xmlns の代わりに m に設定して、xmlns (デフォルト) 名前空間を登録しようとしました。

XML xmlAdHocRequest = new XMLDocument(requestFileIS);
xmlRequest.registerNs("m", "http://www.myaddress.com/myfile.xsd");    

for (XML requestData : xmlRequest.nodes("//m:RequestData")) {
    String startDate = requestData.xpath("startDate/text()").get(0);
}

ノードをフェッチしようとすると、エラーのみが発生しました:

java.lang.IllegalArgumentException: invalid XPath query '//x:RequestData' by org.apache.xpath.jaxp.XPathFactoryImpl
    at org.apache.xpath.compiler.XPathParser.errorForDOM3(XPathParser.java:655)
    at org.apache.xpath.compiler.Lexer.mapNSTokens(Lexer.java:647)
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:365)
    at org.apache.xpath.compiler.Lexer.tokenize(Lexer.java:98)
    at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:112)
    at org.apache.xpath.XPath.<init>(XPath.java:178)
    at org.apache.xpath.XPath.<init>(XPath.java:266)
    at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:195)
    at org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:281)
    at com.jcabi.xml.XMLDocument.fetch(XMLDocument.java:429)
    at com.jcabi.xml.XMLDocument.nodes(XMLDocument.java:352)

私の質問は次のとおりです:私は何か間違ったことをしていますか、それとも何らかのxml.jcabiの問題ですか?

4

1 に答える 1