2013-10-27 142 views
1

所有關於解析xml元素/節點的例子,我發現,都是關於如何從xml文檔中提取節點屬性/值等。如何從xml文檔中提取完整的xml元素

我感興趣的是如何從開始標記提取整個元素到結束標記。 例子: 從XML文檔

<?xml version="1.0"?> 
    <Employees> 
     <Employee emplid="1111" type="admin"/> 
    </Employees> 

我會得到完整的元素

<Employee emplid="1111" type="admin"/> 

挽救它在可變

在此先感謝

+1

也許你應該看看[這裏](http://stackoverflow.com/questions/9886531/how-to-parse-xml-with-jsoup),使用[Jsoup](http://jsoup.org/)。 –

+0

是的,它的工作原理非常完美,但有沒有什麼可以讓它無需外部庫?非常感謝 – FUGAZI

+0

我注意到方法doc.select()(在http://stackoverflow.com/questions/9886531/how-to-parse-xml-with-jsoup)不是關鍵敏感。如果xml元素的屬性名稱有一些大寫字符,返回的字符串有小寫字母:(我對此非常抱歉。 – FUGAZI

回答

0

您可以做一個String解析自己,或使用Android的XML解析器。 This顯示如何使用後者。

如果您使用Android的解析器,則可能需要完全解析它,然後手動構建字符串<Employee emplid="1111" type="admin"/>

+0

嗨,謝謝你的回答。構造字符串是我不想做的。從一個解析器中提取字符串,該解析器爲我提供了完整的元素,這對將來修改xml元素的屬性是安全的。編輯:PS我剛做了構造方法,但不喜歡我的老闆:( – FUGAZI

0

現在這是最好的解決方案。

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.StringWriter; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

... 

//xml document 
String xml = "<?xml version=\"1.0\"?><Employees><Employee emplid=\"1111\" type=\"admin\"/></Employees>"; 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder parser = factory.newDocumentBuilder(); 
Document document = parser.parse(new ByteArrayInputStream(xml.getBytes())); 
//getting the target element 
NodeList list=document.getElementsByTagName("Employee"); 
Node node=list.item(0);  

//writing the element in the string variable 
TransformerFactory transFactory = TransformerFactory.newInstance(); 
Transformer transformer = transFactory.newTransformer(); 
StringWriter buffer = new StringWriter(); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
transformer.transform(new DOMSource(node), new StreamResult(buffer)); 
String str = buffer.toString(); 


System.out.println(str); 

... 

靈感來自this thread