2013-07-05 42 views
0

检测元件我正在寻找一种方式来解析出的文本中的元素。大教堂XML解析器,文本

例如我有以下XML

<Elem1> 

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

</Elem1> 

,所以我可以给Elem1.1元素,但是当我的节点上调用.getTextContent(),我从中{一些文本}找回{一些文字}(所以标签已经基本被删除)。

我如何获得新的线路,这样我可以在JSON对象我解析了这个XML的\ 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

+1

如果已添加以在xml文本中插入\ n,请尝试将其替换为“ ” – user1573133

回答

1

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

+0

想到这就是我必须要做的,只是想着可能有不同的方式。谢谢DMAN – DMCApps

-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 
    } 
} 
+0

这将如何提供帮助? OP需要获取''元素并转换为换行符。 – jtahlborn

+0

基本上这比换行标签更多。我的解决方案提供了节点的完整xml内容。之后,您可以用一个简单的字符串替换替换您感兴趣的标签。 –

+0

为什么要将它从DOM转换回字符串并进行字符串替换是比仅仅使用DOM更好的解决方案? – jtahlborn