Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xpath从子级获取值_Xml_Xpath_Xml Parsing - Fatal编程技术网

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文档。