Java DOM解析器:如何获取文本



我正在用java解析一个xml文档。我试图从一个特殊的节点获取完整的文本。

这是我的xml文档

<xml><archi><test>asd</test></archi><brchi val="a"><asd>Hello</asd><bsd>World</bsd></brchi></xml>

我正在分析这里的文档:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new URL(url).openStream());
        doc.getDocumentElement().normalize();
        Element root = doc.getDocumentElement();
        // loop through each item
        NodeList nList = doc.getElementsByTagName("brchi"); 
        for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp); ...

这很管用。但现在我喜欢从我解析的元素中获得完整的文本。这里是"brchi"。这应该是结果:

<brchi val="a"><asd>Hello</asd><bsd>World</bsd></brchi>

但是,如何获取文本而不是解析元素呢?

感谢

可能有一种更干净的方法,但我所做的是给出XML:

<book ISBN="0123456001">
    <title>Java For Dummies</title>
    <author>Tan Ah Teck</author>
    <category>Programming</category>
    <year>2009</year>
    <edition>7</edition>
    <price>19.99</price>
</book>

这是我用来提取标题文本的代码

NodeList list = doc.getElementsByTagName("title");
Element element = (Element)list.item(0)
System.out.println("tTitle:t"
                   + element.getChildNodes().item(0).getNodeValue());`

试试这个:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new File("data.xml"));

    NodeList list = doc.getElementsByTagName("brchi");
    Node node = list.item(0);
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    DOMSource source = new DOMSource(node);
    StreamResult result = new StreamResult(System.out);
    transformer.transform(source, result);

    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TransformerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}