2013-07-05 64 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