0

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

例如我有以下xml

<Elem1>

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

</Elem1>

所以我可以访问 Elem1.1 元素,但是当我在节点上调用 .getTextContent() 时,我会从它返回 {some text}{some text} (所以标签基本上已被删除)。

如何获得该新行,以便我可以用我从这个 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
    }
}

谢谢, 曼

4

2 回答 2

1

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

于 2013-07-05T19:08:05.617 回答
-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
    }
}
于 2013-07-05T18:56:42.083 回答