java - Java中简单的dom4j解析 - 无法访问子节点

标签 java xml xpath dom4j

我知道这很容易,而且我一整天都在摸索。我有一个像这样的 XML 文档:

<WMS_Capabilities version="1.3.0" xmlns="http://www.opengis.net/wms">
<Service>
<Name>WMS</Name>
<Title>Metacarta WMS VMaplv0</Title>
</Service>
<Capability>
<Layer>
<Name>Vmap0</Name>
<Title>Metacarta WMS VMaplv0</Title>
<Abstract>Vmap0</Abstract>
...

可以有多个Layer节点,并且任何Layer节点都可以嵌套Layer节点。我可以快速选择所有层节点并使用以下 xpath 代码迭代它们:

Map<String, String> uris = new HashMap<String, String>();
uris.put("wms", "http://www.opengis.net/wms");
XPath xpath1 = doc.createXPath("//wms:Layer");
xpath1.setNamespaceURIs(uris);
List nodes1 = xpath1.selectNodes(doc);

for (Iterator<?> layerIt = nodes1.iterator(); layerIt.hasNext();) {
            Node node = (Node) layerIt.next();
}

我取回了所有图层节点。完美的。但是当我尝试访问每个名称或标题子节点时,我什么也得不到。我已经尝试了我能想到的多种组合:

name = node.selectSingleNode("./wms:Name");
name = node.selectSingleNode("wms:Name");
name = node.selectSingleNode("Name");

等等,但它总是返回 null。我猜它与命名空间有关,但我所追求的只是我获得的每个图层节点的名称和标题文本值。任何人都可以提供任何帮助吗:

最佳答案

我相信 Node.selectSingleNode() 使用空的命名空间上下文计算提供的 XPath 表达式。因此无法通过名称访问没有命名空间的节点。必须使用诸如 *[local-name='Name'] 之类的表达式。如果您想要/需要 namespace 上下文,请通过 XPath 对象执行 XPath 表达式。

关于java - Java中简单的dom4j解析 - 无法访问子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22822385/

相关文章:

java - 如何从包(工具栏)设置文本

java - 如何增加Kafka Topic的分区数量

java - Java将两个数组中的每个int元素相乘为字符串元素

c# - 将 ODATA xml 序列化/反序列化为 C# 对象

php - 在 Xpath (PHP) 中获取以大写字母开头的标签

java - 从枚举构造列表<T>

python - 在 lxml 中查找具有未知 namespace 的元素

java - 如何在 restFul 服务 URL 末尾添加参数?

XPath:选择每行中与特定类匹配的第一个元素

selenium - 无法在 Selenium 上获取 moveToElement 显示 SVG 元素的工具提示