当我使用org.dom4j解析XML文档时,我在节点上使用XPath如下:
<JobDescription>
<Formats Description="">
<Format Refed="format_0" Name="MOV" >
<TranscodeParam VideoOutputParamRef="vo_para_28" />
<EnhancementParam VideoEnhancementRef="ve_para_31" />
</Format>
<Format Refed="format_1" Name="WMV" >
<TranscodeParam VideoOutputParamRef="vo_para_32" />
<EnhancementParam VideoEnhancementRef="ve_para_35" />
</Format>
</Formats>
</JobDescription>
Node formatsNode = document.selectSingleNode("//JobDescription/Formats");
if (formatsNode != null) {
for (Node formatNode :
formatsNode.selectNodes("//Format")) {
Node transcodeParaNode = node.selectSingleNode("//TranscodeParam"); //the node always get the first node(Which VideoOutputParamRef="vo_para_28")
}
}
结果是错误的formatNode
TranscodeParam
始终是<Format>
元素中的第一个元素,而不是第二个元素。
如何解决问题?
答案 0 :(得分:0)
在for循环中,您没有使用formatNode
变量,而是使用其他变量(node
):
for (Node formatNode :
formatsNode.selectNodes("//Format")) {
Node transcodeParaNode = formatNode.selectSingleNode("//TranscodeParam"); //the node always get the first node(Which VideoOutputParamRef="vo_para_28")
}
答案 1 :(得分:0)
formatsNode.selectNodes("//Format")
这将使用//Format
作为上下文节点计算XPath表达式formatsNode
。
以“/”开头的任何表达式都从包含上下文节点的树的根中选择,而不是从上下文节点本身中选择。如果要从上下文节点向下选择,请使用
formatsNode.selectNodes(".//Format")