【问题标题】:XML Document is null after parsing string containing XML解析包含 XML 的字符串后,XML 文档为空
【发布时间】:2017-10-09 21:53:24
【问题描述】:

我有一个如下所示的 XML 文档:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/resources/transform.xslt"?>
<map name="response">
    <prop name="numConsumers">87</prop>
    <prop name="numOutEventsQueued">17</prop>
    <prop name="numOutEventsUnAcked">2131</prop>
    <prop name="numOutEventsSent">538108577</prop>
</map>

我将响应作为字符串获取,因此我将其解析为 XML 并尝试提取 numConsumers(值 87):

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;

        builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(xml)));

        NodeList nodeList  = doc.getChildNodes();
        for(int i = 0; i < nodeList.getLength(); i++) {
            String numConsumers = nodeList.item(i).getTextContent();
        }

但问题是,当i = 0numConsumerstype="text/xsl" href="/resources/transform.xslt"i = 1 时,它是连接的所有子节点的值。我究竟做错了什么?我知道当前代码没有明确寻找我想要的节点,但此时我只是想看看我是否可以到达任何节点。

【问题讨论】:

  • 可能是因为您只是在阅读&lt;?xml-stylesheet&gt; 属性。您应该先学习一些关于如何阅读完整 XML 的教程。一开始可能会很棘手。这是一个好的开始Java XML

标签: java xml


【解决方案1】:
NodeList nodeList  = doc.getChildNodes();

在 XML DOM 中,一切都是一个节点。您的案例中的文档在文档级别有 2 个节点,即声明节点('xml-stylesheet')和文档元素('map')。根据解析器的配置,如果文档元素之前或之后有任何空格(和 schema ,你没有,允许它),你会得到那个。

以下是获得您所在位置的方法之一:

NodeList nodeList=doc.getDocumentElement().getElementsByTagName("prop");
for(int i=0;i<nodeList.getLength();i++{

 String number=nodeList.item(i).getFirstChild().getNodeValue();

}

注意.getFirstChild().getNodeValue(),在XML DOM中一切都是一个节点,一个元素节点的内部内容不是节点的值,它是节点的第一个孩子,第一个的值child 是 '87' 或其他值。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多