Dom XML解析器,检测文本中的元素

时间:2013-07-05 17:34:30

标签: java xml parsing dom

我正在寻找一种方法来解析文本中的元素。

例如,我有以下xml

<Elem1>

    <Elem1.1>{some text} <newLine/> {some text}</Elem1.1>

</Elem1>

所以我可以使用Elem1.1元素,但是当我在节点上调用.getTextContent()时,我从它返回{some text} {some text}(因此标记基本上已被删除)。< / p>

如何获取新行,以便我可以用我在xml中解析的json对象中的\ n替换它?

这基本上就是我现在所拥有的

NodeList nodeList = document.getElementsByTagName("Elem1");
for(int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);

    NodeList nodeList2 = ((Element)node).getElementsNyTagName("Elem1.1");


    for(int j = 0; j < nodeList2.getLength(); j++) {
        Element elem11 = (Element)nodeList2.item(j);
        // Add elem11.getTextContent() to an object and later use GSON to convert to Json string and save to file
    }
}

谢谢, DMAN

2 个答案:

答案 0 :(得分:1)

不要使用getTextContent()(这可能很明显)。只使用正常的dom遍历处理子节点。收集文本节点并在遇到它们时转换其他元素,将所有元素组合到一个StringBuilder中。

答案 1 :(得分:-1)

.getTextContent()仅提供元素及其子元素的文本内容。如果需要xml内容,可以将元素转换回xml并写出为字符串。示例代码..

NodeList nodeList = dom.getElementsByTagName("Elem1");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
for(int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
    NodeList nodeList2 = ((Element)node).getElementsByTagName("Elem1.1");
    for(int j = 0; j < nodeList2.getLength(); j++) {
        Element elem11 = (Element)nodeList2.item(j);
        StreamResult result = new StreamResult(new StringWriter());
        DOMSource source = new DOMSource(elem11);
        transformer.transform(source, result);
        String xmlString = result.getWriter().toString();
        System.out.println(xmlString.substring("<?xml version=\"1.0\" encoding=\"UTF-8\"?>".length()));
        // Add elem11.getTextContent() to an object and later use GSON to convert to Json string and save to file
    }
}