Xml xpath从子级获取值
从一个名字我如何得到兄弟姐妹?我不喜欢嵌套的。只有同一级别的。这怎么可能Xml xpath从子级获取值,xml,xpath,xml-parsing,Xml,Xpath,Xml Parsing,从一个名字我如何得到兄弟姐妹?我不喜欢嵌套的。只有同一级别的。这怎么可能 <root available-locales="en_US" default-locale="en_US"> <dynamic-element instance-id="qk6m4eST" name="image" type="image" index-type=""> <dynamic-element instance-id="fHkE2dfT" name="sub
<root available-locales="en_US" default-locale="en_US">
<dynamic-element instance-id="qk6m4eST" name="image" type="image" index-type="">
<dynamic-element instance-id="fHkE2dfT" name="subimage" type="image" index-type="">
<dynamic-element instance-id="jbthDbC4" name="x" type="text" index-type="">
<dynamic-content>23</dynamic-content>
</dynamic-element>
<dynamic-element instance-id="Rb3qRF6N" name="y" type="text" index-type="">
<dynamic-content>32</dynamic-content>
</dynamic-element>
<dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
</dynamic-element>
<dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
</dynamic-element>
<dynamic-element instance-id="MFrJW4OR" name="image" type="image" index-type="">
<dynamic-element instance-id="hjKEtVB6" name="subimage" type="image" index-type="">
<dynamic-element instance-id="NrY9iZ4K" name="x" type="text" index-type="">
<dynamic-content>23</dynamic-content>
</dynamic-element>
<dynamic-element instance-id="7lG7RuAC" name="y" type="text" index-type="">
<dynamic-content>32</dynamic-content>
</dynamic-element>
<dynamic-content><![CDATA[C:\fakepath\grillat.jpeg]]></dynamic-content>
</dynamic-element>
<dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
</dynamic-element>
</root>
23
32
23
32
这是到目前为止我的代码。它打印
测试。。。。。。二十三
这是第一个嵌套子级的值。二十三
public List<PopupImage> getImageNodes(Document document) {
List<Node> nodes = document.selectNodes("/root/dynamic-element[@name='" + IMAGE_NODE_NAME + "']");
List<PopupImage> popupImages = new ArrayList<PopupImage>();
for (Node node : nodes) {
// node.selectSingleNode("//following-sibling::dynamic-content[1]").getText();
System.out.println("test...... " + node.selectSingleNode("//following-sibling::dynamic-content").getText());
createPopupImage(node);
popupImages.add(createPopupImage(node));
}
return popupImages;
}
公共列表getImageNodes(文档){
List nodes=document.selectNodes(“/root/dynamic element[@name='”+IMAGE\u NODE\u name+“]”);
List popupImages=new ArrayList();
用于(节点:节点){
//node.selectSingleNode(//以下同级::动态内容[1]”)。getText();
System.out.println(“test…”+node.selectSingleNode(//以下同级::动态内容”).getText();
createPopupImage(节点);
添加(createPopupImage(节点));
}
返回弹出图像;
}
编辑:我需要每个图像节点和其中的动态值的值
<root>
<dynamic-element name=image>
<dynamic-element name=subimage/>
<dynamic-content>content1</dynamic-content>
</dynamic-element>
<dynamic-element name=image>
<dynamic-element name=subimage/>
<dynamic-content>content2</dynamic-content>
</dynamic-element>
</root>
内容1
内容2
编辑2:
进一步澄清。我需要将每个图像节点与其中的动态内容配对。当前,在选择
元素后,运行以下XPath:
//following-sibling::dynamic-content
让我们看看这意味着什么:
:查找前一个节点的同级节点(即位于相同嵌套级别且具有相同父节点)以下同级节点::
:此同级节点必须是动态内容
元素
元素。在该同级节点中,您希望找到一个子节点,即
元素
因此,请在节点中尝试此XPath。选择SingleNode
调用:
following-sibling::dynamic-element/dynamic-content
使用:
/*/dynamic-element[@name='image'][1]/dynamic-content
/*/dynamic-element[@name='image']/dynamic-content
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
/*/dynamic-element[@name='image']/dynamic-content/text()
这将选择任何动态内容
,该内容是动态元素
的子元素,是顶部元素的第一个动态元素
子元素,其名称
属性的字符串值是字符串“image”
和此XPath表达式:
/*/dynamic-element[@name='image'][1]/dynamic-content
/*/dynamic-element[@name='image']/dynamic-content
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
/*/dynamic-element[@name='image']/dynamic-content/text()
选择:
/*/dynamic-element[@name='image'][1]/dynamic-content
/*/dynamic-element[@name='image']/dynamic-content
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
/*/dynamic-element[@name='image']/dynamic-content/text()
这将选择上一个表达式所选元素的以下两个文本节点子项:
C:\fakepath\images (1).jpeg
C:\fakepath\images (1).jpeg
您可以通过在返回的
XmlNodeList
上迭代并获取其中包含的每个xmlnodel
对象的值来获取所选节点的值。您阅读了吗,特别是在后面的同级轴上?我尝试了下面的同级,但它也提供了嵌套的同级。我只需要一个在同一水平。不过我会读的。到目前为止,我只使用google作为例子。下面的兄弟姐妹不应该给你嵌套的。你能把你的问题扩展到更多你目前正在做的事情吗;i、 e.您选择的是文档的哪一部分,基于此,您使用了什么带有以下同级的XPath来获取同级?好的,我想我看到了问题所在,但在编写答案之前,我想声明我不能完全重现您代码的行为。很可能我使用的Xml引擎与您不同,但我不知道23
如何被后面的同级::dynamic content
XPath表达式选择,因为它显然不是任何其他元素的同级。您向我们展示的源Xml文档是否完整,或者实际上是否有其他元素?(这没关系;我只是想知道我是否遗漏了什么)另外,如果您正在寻找“current”元素的同级元素(似乎是
),同级元素也将是Xml文档中的
,而不是像您试图在代码中选择的那样的
,对吗?奇怪。它只运行一次迭代。第二个“映像”抛出一个空指针。@user874774:那么,第二个映像的名称是什么?应该是相同的第一个迭代节点……org.dom4j.tree。DefaultElement@6d9e9816[要素:]文本。。。。。。C:\fakepath\images(1).jpeg路径/根/动态元素/动态内容第二次迭代节点。。。。Null这两个节点应该相同。@user874774:什么是IMAGE\u NODE\u NAME
?是图像吗
?谢谢,但我需要这个元素@user874774:是的,你的问题中缺少这个元素,所以我猜--请你,编辑问题并在此处指定所选节点是什么?@user874774:您想要的不能仅仅通过计算XPath表达式来实现——XPath是XML文档的查询语言——因此它不会修改(插入/删除)XML文档的节点。我很快会给你一个XSLT解决方案。你是什么意思?它似乎起作用了。我只想查询值。不要修改任何东西。谢谢。@user874774:完成。在编辑中,您可以说您看到了生成的新文档,并指定了确切的所需文档。此转换应用于提供的XML文档,并从中生成所需的XML文档。