Java:JAXP意外的解析值(将XML解析为列表<;列表<;字符串>;)

Java:JAXP意外的解析值(将XML解析为列表<;列表<;字符串>;),java,xml,jaxp,Java,Xml,Jaxp,我有这样的XML文件: <?xml version="1.0" encoding="ISO-8859-2"?> <some some1="string" some2="string"> <value1>string</value1> <value2>string</value2> <position1> <someval1>string</someval1> <someval

我有这样的XML文件:

<?xml version="1.0" encoding="ISO-8859-2"?>
<some some1="string" some2="string">
<value1>string</value1>
<value2>string</value2>
<position1>
  <someval1>string</someval1>
  <someval2>string</someval2>
  <someval3>string</someval3>
  <someval4>string</someval4>
</position1>
<position2>
  <someval1>string</someval1>
  <someval2>string</someval2>
  <someval3>string</someval3>
  <someval4>string</someval4>
</position2>
为什么有空行?我的代码怎么了?另外,System.out.println(current.getLength())给了我9,但为什么是9,必须有4。。。
谢谢。

在第二个for循环中,您正在通过每个节点进行循环,并且没有检测它是否是元素节点。得到9个节点是因为在每个
元素之前和之后计算了4个元素节点+5个文本节点(包含空格-制表符、空格和换行符)

如果只想筛选元素节点,则需要像在上一个循环中一样测试该循环中当前节点的类型:

for (int j = 0; j < current.getLength(); j++) {
    if (current.item(j).getNodeType() == Node.ELEMENT_NODE) { // add this!
        tempData.add(current.item(j).getTextContent().trim());
        System.out.println(current.item(j).getTextContent().trim() + " - str to note every output line");
    }
}
for(int j=0;j

现在它将不再打印空行,循环将为每个
元素迭代四次。

太好了,谢谢!您认为我的代码对那个XML文件有什么好处?这取决于您想对数据做什么。如果只需要从某些节点提取数据,使用XPath可能会更简单。您还可以使用不太官僚的DOM API,例如JDOM或DOM4J,或者返回元素(而不是其他节点)的DOM方法,例如
getElementsByTagName()
。将有几种类型的.xml文件(具有3-5个节点)。保存到列表后,我将使用生成的列表填充表格。算法必须是通用的,因为有不同的节点名和节点数(如上所述)
000/F/ZZZ/2001 - str to note every output line
2001-01-01 - str to note every output line
 - str to note every output line
USD - str to note every output line
 - str to note every output line
1 - str to note every output line
 - str to note every output line
EUR - str to note every output line
 - str to note every output line
for (int j = 0; j < current.getLength(); j++) {
    if (current.item(j).getNodeType() == Node.ELEMENT_NODE) { // add this!
        tempData.add(current.item(j).getTextContent().trim());
        System.out.println(current.item(j).getTextContent().trim() + " - str to note every output line");
    }
}