我使用 DOM 解析器来解析 XML 文件。我使用格式化的 xml 和未格式化的 xml 文件作为输入。
已格式化
<students>
<student>
<name>Vicky</name>
</student>
<student>
<name>John</name>
</student>
</students>
未格式化
<students><student><name>Vicky</name></student><student><name>John</name></student></students>
当运行下面的代码来获取子元素时,我得到了不同的结果。
public class XmlTest {
public static void main(String[] args) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new FileInputStream("testFile.xml")));
doc.getDocumentElement().normalize();
Element mainEle = doc.getDocumentElement();
NodeList nodes = mainEle.getChildNodes();
System.out.println("No.of Childs = " + nodes.getLength());
} catch (ParserConfigurationException | SAXException | IOException e) {
System.out.println("Error " + e);
}
}
}
结果是;
对于格式化 XML:5
未格式化:2
为什么相同内容的xml会有不同的结果?
最佳答案
创建格式的空白由 text()
节点组成。它们在未格式化的 XML 中丢失。
在未格式化的文档中,根目录有 1 个 student
子级。在格式化的节点中,还有 3 个 text()
节点:学生之前、学生之间和学生之后。
在 xsh 中验证:
open file.xml ;
for /students/node() echo name() xsh:if(self::text(), 'text', '') ;
text
student
text
student
text
关于java - java DOM XML 解析的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954539/