0

そのため、SAX を使用して XML ドキュメントを正常に解析できました。現在、DOM を使用して XML ドキュメントを解析しようとしています (結果として、SAX を使用した場合と同じ出力が得られます)。

私は、DOM で動作するようにほとんどの SAX コードを編集することができました。

たとえば、開始要素と終了要素に SAX を使用すると、次のように使用できます。

if (qName.equals("Name")){...}

Node.ELEMENT_NODE の場合に DOM を使用して、これを次のように編集しました。

String name = node.getNodeName();
if (name.equals("Name")){...}

私が立ち往生している部分は、DOMを使用して同様の方法でSAXのすべてのendElementを解析する方法ですか?

以下を使用してすべてのテキストを印刷できました。

 case Node.TEXT_NODE:

    System.out.print(node.getNodeValue().trim());

しかし、特定のテキストノードの後に​​何かを印刷するにはどうすればよいでしょうか? SAX では、これは endElement で簡単に実行できます。

これを使用して名前要素内からテキストを出力しようとしましたが、うまくいきません。

case Node.TEXT_NODE:

if (node.getNodeName().equals("name")) {
      System.out.print(node.getNodeValue().trim());
    }

これについて助けてくれてありがとう。

4

3 に答える 3

0

必要なノードがわかっている場合の別のアプローチは、xpathを使用することです。セットアップは圧倒されるように見えるかもしれませんが、非常に強力です。

String xpath="//name";
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile(xpathStatement);
NodeList nodes = (NodeList) expr.evaluate(source, XPathConstants.NODESET);
for (int i=0; i<nodes.getLength(); i++) {
    Node node = nodes.item(i);
    System.out.println(node.getNodeValue());
}
于 2012-04-21T16:45:52.453 に答える
0

再帰的アプローチを試しましたか?

public void visitNode(Node node) {
   // Print something emulating a start tag

   // Visit all child nodes recursively
   for (int i = 0; i < node.getChildNodes().getLength(); i++)
     visitNode(node.getChildeNodes().item(i));

   // Print something emulating an end tag
}
于 2012-04-21T16:23:14.477 に答える
0

javadocを調べてください。Node固定名が付いてい"#text"ます。タグである親の名前を確認する必要があります。

case Node.TEXT_NODE:

if (node.getParentNode().getNodeName().equals("Name")) {
  System.out.print(node.getNodeValue().trim());
}
于 2012-04-21T20:51:52.767 に答える