gpt4 book ai didi

java - 节点操作

转载 作者:行者123 更新时间:2023-11-30 07:28:31 25 4
gpt4 key购买 nike

我正在学习 Java XML API。我正在使用 DOM。

我什至无法在文档中进行基本导航。这是我正在使用的 XML 文件:

<?xml version="1.0"?>
<company>
<staff>
<firstname>test</firstname>
<lastname>test2</lastname>
<nickname>test3</nickname>
<salary>test4</salary>
</staff>
<staff>
<firstname>test5</firstname>
<lastname>test6</lastname>
<nickname>test7</nickname>
<salary>test8</salary>
</staff>
</company>

这是我到目前为止的代码,应该获取父节点及其子节点的名称:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(pathtothefile));

Element topLevelElement = document.getDocumentElement();
NodeList secondLevelElements = topLevelElement.getChildNodes();

System.out.println("Top level element: " + topLevelElement.getNodeName());
System.out.println("Number of second level nodes: " + secondLevelElements.getLength());
System.out.println("Node at index 0: " + secondLevelElements.item(0).getNodeValue());

我得到二级节点的数量(出于某种原因是 5,而不是 2)但是当我尝试获取索引 0 处的节点名称时,我得到“#text”或者如果我尝试获取值:无显示。

我将不胜感激任何帮助,因为我是所有这些的初学者并且有点迷路:)

更新 1:

这是新代码:

Element companyElement = document.getDocumentElement();
NodeList staffElements = companyElement.getElementsByTagName("staff");
NodeList firstNameElements = companyElement.getElementsByTagName("firstname");
NodeList lastNameElements = companyElement.getElementsByTagName("lastname");
NodeList nicknameElements = companyElement.getElementsByTagName("nickname");
NodeList salaryElements = companyElement.getElementsByTagName("salary");

System.out.println("Top level element: " + companyElement.getNodeName());
System.out.println("----");
System.out.println("Next nodes' level name: " + staffElements.item(0).getNodeName());
System.out.println("Next nodes' level number: " + staffElements.getLength());
System.out.println("----");
System.out.println("Person No. 1");
System.out.println("First name: " + firstNameElements.item(0).getNodeValue());
System.out.println("Last name: " + lastNameElements.item(0).getNodeValue());
System.out.println("Nickname: " + nicknameElements.item(0).getNodeValue());
System.out.println("Salary: " + salaryElements.item(0).getNodeValue());
System.out.println("----");
System.out.println("Person No. 2");
System.out.println("First name: " + firstNameElements.item(1).getNodeValue());
System.out.println("Last name: " + lastNameElements.item(1).getNodeValue());
System.out.println("Nickname: " + nicknameElements.item(1).getNodeValue());
System.out.println("Salary: " + salaryElements.item(1).getNodeValue());

最佳答案

I get number of second level nodes (it is for some reason 5, not 2)

这是因为 DOM 保留了空白。所以你在那个级别拥有的是:

[whitespace][staff element][whitespace][staff element][whitespace]

即5个节点。

when I try to get the name of node at index 0 I get "#text"

如果您阅读 the javadoc对于 Node.getName() ,你会知道为什么。索引 0 处的节点是空白节点,getName()在文本节点上返回硬连线字符串 #text .

if I try to get the value: nothing displays

同样,那是因为它是一个纯文本节点。

如果你需要访问 <staff>,你需要获取索引 1 和 3 的节点。元素。

关于java - 节点操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com