gpt4 book ai didi

java - Java 中的 XPATH : parent node missing

转载 作者:行者123 更新时间:2023-12-01 15:21:33 26 4
gpt4 key购买 nike

我有以下 XML 结构:

<map name="testmap">
<definitions>
<tile name="ground"> <!-- a normal tile that has no special obstacles -->
<centralObstacle>ground</centralObstacle>
<neighbourObstacles>
<north></north>
<east></east>
<south></south>
<west></west>
</neighbourObstacles>
</tile>
<tile name="wallE"> <!-- a ground tile with a wall obstacle at the east-->
<centralObstacle>ground</centralObstacle>
<neighbourObstacles>
<north></north>
<east>wall</east>
<south></south>
<west></west>
</neighbourObstacles>
</tile>
</definitions>
</map>

我想用 XPATH 查询它。我想做的是获取所有图 block 节点,然后迭代它们以获取它们的所有名称和其他相关信息(使用不同的 XPATH 查询)。

因为 XPATH 表达式要在文档上运行,所以我使用了以下 nodeListToDoc() 函数,该函数在 this 中提供。答案将 XPATH 查询的结果(NodeList)转换为文档。这样我可以首先获取所有 Tiles,然后迭代它们以获取 Tile 特定信息。

private Document nodeListToDoc(NodeList nodes) throws ParserConfigurationException  
{
Document newXmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = newXmlDocument.createElement("root");
newXmlDocument.appendChild(root);
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
Node copyNode = newXmlDocument.importNode(node, true);
root.appendChild(copyNode);
}
return newXmlDocument;
}

我首先要做的是将文件解析为文档,然后运行查询以获取包含所有图 block 的 NodeList。当我运行查询 //definitions/tile 时,我得到一个包含两个节点项的 NodeList(我已经验证了这一点),这是正确的。应用 nodeListToDoc() 的结果如下所示。

 <?xml version="1.0" encoding="UTF-16"?>
<root><tile name="ground"> <!-- a normal tile that has no special obstacles -->
<centralObstacle>ground</centralObstacle>
<neighbourObstacles>
<north/>
<east/>
<south/>
<west/>
</neighbourObstacles>
</tile><tile name="wallE"> <!-- a ground tile with a wall obstacle at the east-->
<centralObstacle>ground</centralObstacle>
<neighbourObstacles>
<north/>
<east>wall</east>
<south/>
<west/>
</neighbourObstacles>
</tile></root>

到目前为止一切顺利。现在事情变糟了。我想迭代这两个节点,创建它们的 NodeList,将该 NodeList 转换为文档,然后对它们运行一些查询。其中一个查询是获取每个图 block 的名称。我认为下面的代码片段可以解决问题:

  for (int i = 0; i < nodes.getLength(); i++) { // iterate over the two nodes
NodeList tile = (NodeList) nodes.item(i); // create a nodelist containing only the first node
Document attrdoc = nodeListToDoc(tile); // convert it to a document
}

但是,当我打印 attrdoc 表示的结果树时,我在第一次迭代中得到以下结果:

<?xml version="1.0" encoding="UTF-16"?>
<root> <!-- a normal tile that has no special obstacles -->
<centralObstacle>ground</centralObstacle>
<neighbourObstacles>
<north/>
<east/>
<south/>
<west/>
</neighbourObstacles>
</root>

这是不正确的。根元素的子元素应该是tile?这个元素到哪里去了?

最佳答案

您并没有真正解释您想要实现的目标,但您的描述确实让我想知道 Java+XPath 是否是适合该工作的工具。您是否考虑过在 XQuery 或 XSLT 中执行此操作?

关于java - Java 中的 XPATH : parent node missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10840094/

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