2012-04-21 3 views
0

Итак, мне удалось успешно проанализировать мой XML-документ с помощью SAX, и теперь я пытаюсь проанализировать XML-документ с помощью DOM (в результате получается тот же результат, что и при использовании SAX).Нужна помощь, переходящая из SAX в DOM. Parsing XML (java)

Мне удалось отредактировать большую часть кода SAX для работы в DOM.

Например, с помощью SAX в начальном и конечном элементе я использовал:

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

и с DOM в случае Node.ELEMENT_NODE я только что отредактировал это:

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

Часть I» m застрял в том, как я могу разобрать все endElement в SAX аналогичным образом с помощью DOM?

мне удалось напечатать весь текст с помощью:

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()); 
    } 

Спасибо за любую помощь по этому вопросу.

+0

Chk this out http://www.mkyong.com/java/how-to-read-xml-file-in-java- дом-анализатор / – ant

ответ

0

Посмотрите в Node Javadoc - это имеет фиксированное имя "#text"; вам необходимо проверить имя родителя, которое является тегом:

case Node.TEXT_NODE: 

if (node.getParentNode().getNodeName().equals("Name")) { 
    System.out.print(node.getNodeValue().trim()); 
} 
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 
} 
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()); 
}