如何从xml文档中提取整个xml元素

时间:2013-10-27 22:54:07

标签: java android xml-parsing

我发现的解析xml元素/节点的所有示例都是关于如何从xml文档中提取节点属性/值等。

我对如何从开始标记提取整个元素到结束标记感兴趣。 例: 来自xml文档

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

我会得到完整的元素

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

将其保存在String变量

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以自己进行解析,也可以使用Android的XML解析器。 This显示了如何使用后者。

如果您使用Android的解析器,则可能必须完全解析它,然后手动构造字符串<Employee emplid="1111" type="admin"/>

答案 1 :(得分: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启发