这似乎是非常基本的问题。 但我还不清楚它。 这是问题,
我有一个xml的形式:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>storm.starter</groupId>
<artifactId>storm-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>storm-starter</name>
<url>https://github.com/nathanmarz/storm-starter</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>github-releases</id>
<url>http://oss.sonatype.org/content/repositories/github-releases/
</url>
</repository>
<repository>
<id>clojars.org</id>
<url>http://clojars.org/repo</url>
</repository>
</repositories>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>storm.starter</groupId>
<artifactId>storm-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>storm-starter</name>
<url>https://github.com/nathanmarz/storm-starter</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
</root>
我想逐个打印每个节点的文本内容。 此外,我们假设之前没有标记。 下面是示例代码
public static void anotherMethod(Document doc)
{
// NodeList nl = doc.getChildNodes();
NodeList nodeList=doc.getElementsByTagName("*");
for (int i=0; i<nodeList.getLength(); i++)
{
// Get element
Element element = (Element)nodeList.item(i);
System.out.println(element.getNodeName()+" : "+element.getNodeValue());
}
}
这里的输出如下:
root : null
project : null
modelVersion : null
groupId : null
artifactId : null
version : null
packaging : null
name : null
url : null
properties : null
project.build.sourceEncoding : null
repositories : null
repository : null
id : null
&#13;
但我希望输出应该像:
modelVersion : 4.0.0
groupId : storm.starter
artifactId : storm-starter
version : 0.0.1-SNAPSHOT
这里不应该给我没有文字值的节点。
我尝试将getNodevalue()
替换为getTextContent()
,但这会在该节点内提供所有文本内容,包括属于子节点的内容。
请建议一种方法。
答案 0 :(得分:0)
您需要使用getTextContent()
代替getNodeValue()
。
NodeList nodeList=doc.getElementsByTagName("*");
for (int i=0; i < nodeList.getLength(); i++)
{
Element element = (Element)nodeList.item(i);
if (element.getChildNodes().getLength() == 0)
System.out.println(element.getNodeName()+" : "+element.getTextContent());
}
答案 1 :(得分:0)
从@Yeldar给出的提示中获取提示 确切的解决方案是:
getInitialState
它可以打印输出
NodeList nodeList=doc.getElementsByTagName("*");
for (int i=0; i < nodeList.getLength(); i++)
{
Node node = nodeList.item(i);
if (node.getChildNodes().getLength() == 1)
{
System.out.println(node.getNodeName()+" : "+node.getFirstChild().getTextContent().trim());
}
}