0

xmlを含む文字列からorg.w3c.dom.Documentに解析しようとすると、解析の問題が発生します。

これが私が解析しようとしているxml文字列の例です:

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
   <idLote>123</idLote>
   <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
    ...
   </NFe>
</enviNFe>

問題は、que Stringが解析された後、次のコードによって次のようになることです。

private Document documentFactory(String xml) throws SAXException,      
    IOException, ParserConfigurationException, DocumentException, TransformerException {    

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();      
    factory.setNamespaceAware(true);    

    Document document = factory.newDocumentBuilder().parse(      
        new ByteArrayInputStream(xml.getBytes()));    

return document;    
}

タグNFeは、名前空間なしでロードされます(xmlns = "http://www.portalfiscal.inf.br/nfe")

なぜこれが起こるのか、そしてこれを解決するために何ができるのか知りたいです。

どんな助けでも素晴らしいでしょう。ありがとう、そして私の英語をごめんなさい。

------編集----より良い理解のために:

このxmlは、解析直後に署名され、政府のサーバー(ブラジル)に送信されます。この後、このサーバーに対して別のリクエストを実行して、サーバーが処理されたかどうかを確認します。もしそうなら、エラーが発生した場合に私は肯定的な応答を受け取ります。私が最初に抱えた問題は、xmlの形式が正しくないことでした。これは、タグNFeにその名前空間なしでxmlを送信していたために発生しました。これを解決するために、xmlが署名された後、ファイルにそれ(名前空間)を追加しました。この問題は実際には解決されましたが、別の問題が発生しました。署名の違いです。名前空間なしでxmlに署名し、それを使用して送信するためです。

4

2 に答える 2

0

正しいドキュメントを返しています。それをテストするには、ドキュメントをウォークスルーするだけです。

doc.getFirstChild().getFirstChild().getNextSibling().getNextSibling().getNextSibling().getNamespaceURI();

または、その名前でタグを取得してみてください:

NodeList tags = doc.getElementsByTagNameNS("http://www.portalfiscal.inf.br/nfe", "NFe");
于 2013-01-03T19:54:35.270 に答える
0

あなたのさまざまなコメントから私がまとめることができることから、xml の仕組みを誤解していると思います。名前空間をNFe要素に手動で追加したことを示します。ただし、xml の例では、NFeノードには既にその名前空間があります

この xml では:

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
   <idLote>123</idLote>
   <NFe>
    ...
   </NFe>
</enviNFe>

すべてのノードには「http://www.portalfiscal.inf.br/nfe」名前空間があります。親ノードにxmlns="..."アトリビュートを配置することで、名前空間がそのノードとすべての子ノードに同じプレフィックス (この場合はプレフィックスなし) で適用されます。

于 2013-01-03T21:27:29.763 に答える