【发布时间】:2012-08-04 16:52:51
【问题描述】:
如何从名字中获得兄弟姐妹?我不喜欢嵌套的。只有同一级别的。这怎么可能?
<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>
编辑2:
澄清更多。我需要将每个图像节点与其中的动态内容配对。
【问题讨论】:
-
你读过spec on the available axes,尤其是
following-sibling轴吗? -
我尝试了以下兄弟,但它也给了我嵌套的。我只需要同一级别的。不过我会读的。到目前为止,我只使用谷歌作为示例。
-
following-sibling不应该给你嵌套的。您能否扩展您的问题以显示到目前为止您正在做的更多事情?即您选择了文档的哪一部分,并基于此,您使用了带有following-sibling的 XPath 来获取兄弟姐妹? -
好的,我想我看到了问题,但在写答案之前,我想声明我无法完全重现您的代码的行为。很可能我使用的 Xml 引擎与您使用的不同,但我看不出
<dynamic-content>23</dynamic-content>如何可能被following-sibling::dynamic-contentXPath 表达式选择,因为它显然不是任何其他元素的兄弟。您向我们展示的作为源 Xml 文档的内容是否完整,或者实际上是否有任何其他元素? (没关系;我只是想知道我是否遗漏了什么) -
此外,如果您正在寻找“当前”元素的同级(似乎是
<dynamic-element>),则同级在您的 Xml 文档中也将是<dynamic-element>,而不是<dynamic-content>就像您尝试在代码中选择的内容一样,对吧?
标签: xml xpath xml-parsing