gpt4 book ai didi

java - 如何正确读取 XML 文件中的节点值?

转载 作者:行者123 更新时间:2023-11-30 03:51:58 28 4
gpt4 key购买 nike

当我尝试检索 XML 节点值时遇到问题。如果不做一些解释,很难提出这个问题。我创建了一个服务器-客户端聊天室,服务器处理所有包含用户用户名的 XML 数据。例如,用户发送一条消息,该消息将广播给服务器上的每个人。当消息到达服务器时,服务器将根据用户当前的 IP 地址检查数组。如果 IP 在数组中,则另一个具有相应编号的数组将返回用户名,然后将其广播给所有聊天室用户。当新用户或离线用户加入服务器时,我的问题就会出现。如果 IP 不在数组中,服务器会检查一个 XML 文件,其中包含所有在线或老用户最后已知的 IP(这部分正在为拥有新 IP 的老用户解决),然后服务器会将其添加到大批。这在理论上是可行的,但在代码中它不会产生相同的结果。我可以将当​​前 IP 添加到数组中,但无法获取用户名。我相信这是因为用户的旧IP是节点名称,用户名是节点值。例如:用户名.xml 文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Server>
<i0000>User</i0000>
<i1921681114>Chappy</i1921681114>
</Server>

将其添加到数组的函数:

public static void addInArray(String IPtoCheck) throws Exception{
File fXmlFile = new File("Usernames.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);

doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName(IPtoCheck);
for(int i=0; nList.getLength()>i; i++){
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
if(eElement.getNodeName().equals(IPtoCheck)){
int used = 0;
while (used < 63){
if(IPs[used].equals("no")){
IPs[used] = IPtoCheck;
usernames[used] = eElement.getNodeValue();
AppendArea.Apen(3, usernames[used]);
break;
}
used++;
}
}
}
}
}

另外我应该补充一点,我确实使用了

Arrays.fill(IPs, "no");
Arrays.fill(usernames, "no");

no代表开放阵列点

IPtoCheck 字符串也是修改后的 IP 值。例如,在 XML 文件中,ip 节点是:

i1921681114

这实际上是 192.168.1.114

经过所有这些冗长的解释,我的问题如下:

如何使用 Java 正确读取 XML 文件中的节点值?

因为 eElement.getNodeValue();没有返回正确的值,它只返回“null”

最佳答案

org.w3c.dom.Element 对象永远不会有节点值,因此它将始终返回 null。

你需要得到它的 child 。如果您使用:

eElement.getFirstChild().getNodeValue();

您将检索元素的第一个子节点,这是您想要的文本节点。

您还可以使用:

eElement.getFirstChild().getTextContent();

返回元素的文本内容,在本例中,具有相同的结果。

如果您发现 Java 中的 DOM API 违反直觉,您可以使用其他 API,例如 JDOM 或 DOM4J,或者使用其他 J2SE 标准方法,例如 XPath。

关于java - 如何正确读取 XML 文件中的节点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215004/

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