【问题标题】:Java DOM Parser: How to get text?Java DOM Parser:如何获取文本?
【发布时间】:2015-02-19 19:40:52
【问题描述】:

我正在用 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>

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

谢谢

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    可能有一种更清洁的方法,但我所做的是给定 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());`
    

    【讨论】:

    • 我不需要 NodeValue 我需要包含所有子节点的完整节点。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-08
      • 2015-11-20
      • 2013-04-20
      • 1970-01-01
      • 2017-09-10
      • 2011-04-11
      • 2015-09-18
      • 1970-01-01
      相关资源
      最近更新 更多