2013-10-27 40 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