java - 在 java 中解析 xml - getTextContent() 和 getNodeValue() 仅返回\n、\t 和空格

标签 java xml

我在用 java 解析一些 XML 时遇到了一些麻烦。我的 XML 文件被正确读取,并且我能够使用节点的 getTextContent() 函数毫无问题地从文件中获取大部分信息(即 StreamType 节点,显示在 xml 片段中)。

但是,当我尝试处理节点的子节点时,getNodeValue() 和 getTextContent() 都会返回这个随机值:“\n\t\t”。

NodeList propertyNodes 似乎已正确填充(包含所有 18 个“Property”元素)。

这是我的代码片段:

Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);

...

String typeName = document.getElementsByTagName("StreamType").item(0).getTextContent();

...

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
int nodelistlength = propertyNodes.getLength();
for (int i = 0; i < nodelistlength; i++) {
    Node currentNode = propertyNodes.item(i);
    Node nameNode = currentNode.getFirstChild();
    Node valueNode = currentNode.getLastChild();

    String name = nameNode.getNodeValue();
    String value = valueNode.getNodeValue();

    if (nameNode.getTextContent().equalsIgnoreCase("maxConnections"))
        limit = valueNode.getTextContent();
}

下面是我尝试解析的 XML 中的一些片段:

<Root>
 <Application> 
  <Streams>
   <StreamType>live</StreamType>
   ...
  </Streams>

  ...

  <Properties> 

   ...

   <Property>
    <Name>maxConnections</Name> 
    <Value>1000</Value> 
   </Property> 

   ...

  </Properties>
 </Application>
</Root>

知道我在这里可能做错了什么吗?非常感谢!

编辑:感谢@home 发布的教程,现在可以使用了。这就是我修复代码的方式:

1) 修改了以“String limit”开始并以 for 循环的结束括号结束的代码块:

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
for (int i = 0; i < propertyNodes.getLength(); i++) {
    Node currentNode = propertyNodes.item(i);

    if (currentNode.getNodeType() != Node.ELEMENT_NODE)
        continue;

    Element currentElement = (Element)currentNode;

    if (getTagValue("Name",currentElement).equalsIgnoreCase("maxConnections"))
        limit = getTagValue("Value",currentElement);
}

2) 从教程中添加了这个方便的功能:

private static String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    return nValue.getNodeValue();
}

它现在可以完美地获取“Properties”元素的子名称/值对。非常感谢!

最佳答案

遗憾的是,Java DOM 并不那么容易使用。您必须区分不同的节点类型。不是最好的教程,但这是我刚刚使用 Google 发现的:http://mkyong.com/java/how-to-read-xml-file-in-java-dom-parser

关于java - 在 java 中解析 xml - getTextContent() 和 getNodeValue() 仅返回\n、\t 和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392646/

相关文章:

java - XMLUNIT 忽略 xmlns?

java - JAXB 解码,保证元素的顺序

java - NullPointerException 在 textview 中使用 fragment

java - jmDNS 文档/示例

java - 像 Uber Android 一样在 map 上旋转标记和移动动画

java - 将 XML 文件转换为字符串,无需在 Java 中进行操作或优化

java - 在不将所有比较数据加载到内存的情况下比较两组 XML 数据

java - Java中线程间的通信无锁

java - 存储口袋妖怪类型游戏信息的最佳方式是什么?

java - 应用程序错误: 10 using Google Cloud Storage Java API to read a big zip file