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

Java 如何从xml文档中提取整个xml元素,java,android,xml-parsing,Java,Android,Xml Parsing,我发现的所有解析xml元素/节点的示例都是关于如何从xml文档中提取节点属性/值等 我对如何从开始标记到结束标记提取整个元素感兴趣。 例子: 从xml文档 <?xml version="1.0"?> <Employees> <Employee emplid="1111" type="admin"/> </Employees> 我会得到完整的元素 <Employee emplid="1111" type="

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

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

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

我会得到完整的元素

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

将其保存在字符串变量中


提前感谢

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


如果您使用Android的解析器,您可能需要完全解析它,然后手动构造字符串

目前这是最好的解决方案

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);

...
import java.io.ByteArrayInputStream;
导入java.io.IOException;
导入java.io.StringWriter;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
...
//xml文档
字符串xml=”“;
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder解析器=factory.newDocumentBuilder();
Document Document=parser.parse(新的ByteArrayInputStream(xml.getBytes());
//获取目标元素
NodeList list=document.getElementsByTagName(“员工”);
节点=列表项(0);
//在字符串变量中写入元素
TransformerFactory transFactory=TransformerFactory.newInstance();
变压器=transFactory.newTransformer();
StringWriter缓冲区=新StringWriter();
setOutputProperty(OutputKeys.OMIT_XML_声明,“yes”);
transform(新的DOMSource(节点)、新的StreamResult(缓冲区));
String str=buffer.toString();
系统输出打印项次(str);
...

灵感来源于

也许你应该看看哪些用途。是的,它工作得很完美,但是没有外部库,有什么东西可以让它成为现实吗?谢谢,我注意到doc.select()方法(in)不区分键。如果xml元素属性名称包含一些大写字符,则返回的字符串包含小写字符:(我对此感到非常抱歉。嗨,谢谢你的回答。构造字符串实际上是我不想做的。我必须从解析器中提取字符串,以提取完整元素。以后可以安全地修改xml元素的属性。编辑:P.s.我刚做了构造,但不喜欢我的老板:(