【问题标题】:how to extract entire xml element from xml document如何从xml文档中提取整个xml元素
【发布时间】:2013-11-06 15:00:41
【问题描述】:

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

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

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

我会得到完整的元素

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

将其保存在字符串变量中

提前致谢

【问题讨论】:

  • 也许你应该看看使用Jsoupthis
  • 是的,它工作得很好,但是没有外部库有什么办法吗?非常感谢
  • 我注意到方法 doc.select() (在stackoverflow.com/questions/9886531/how-to-parse-xml-with-jsoup 中)对键不敏感。如果 xml 元素属性名称包含一些大写字符,则返回的字符串为小写 :( 对此我感到非常抱歉。

标签: java android xml-parsing


【解决方案1】:

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

如果你使用 Android 的解析器,你可能必须完全解析它,然后手动构造字符串&lt;Employee emplid="1111" type="admin"/&gt;

【讨论】:

  • 您好,感谢您的回答。构造字符串完全是我不想做的。我必须从解析器中获取字符串,该解析器将完整的元素提取给我。将来修改 xml 元素的属性是安全的。编辑:附言我刚刚做了施工方式,但不喜欢我的老板:(
【解决方案2】:

目前这是最好的解决方案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多