从一个名字我怎么得到sibbling?我不会嵌套的。只有同一级别的人。这怎么可能?
<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
这是第一个嵌套子级的值。 23
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;
}
编辑:我需要每个图像节点及其中的动态值的值。
<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>
EDIT2:
澄清更多。我需要将每个图像节点与其中的动态内容配对。
答案 0 :(得分:1)
使用强>:
/*/dynamic-element[@name='image'][1]/dynamic-content
这将选择作为顶级元素的第一个dynamic-content
子级dynamic-element
的子级的任何dynamic-element
,其name
属性的字符串值为字符串"image"
。
这个XPath表达式:
/*/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
并获取其中包含的每个XmlNode
对象的值来获取所选节点的值。
答案 1 :(得分:0)
目前,在选择<dynamic-element>
元素后,运行以下XPath:
//following-sibling::dynamic-content
让我们来看看这意味着什么:
//
:移回文档根目录并考虑嵌套在任何级别的所有节点。following-sibling::
:找到一个节点,它是前一个节点的兄弟节点(即在相同的嵌套级别上,并且具有相同的父节点)。dynamic-content
:此兄弟节点必须是<dynamic-content>
元素。这不是您想要的内容。
相反,您希望找到当前节点的以下兄弟。那个兄弟姐妹将成为<dynamic-element>
元素。在那个兄弟中,你想要找到一个子节点,即<dynamic-content>
元素。
因此,请在node.selectSingleNode
电话中尝试此XPath:
following-sibling::dynamic-element/dynamic-content