Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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
Java 使用条件筛选不同内部路径中的XPATH元素_Java_Xpath - Fatal编程技术网

Java 使用条件筛选不同内部路径中的XPATH元素

Java 使用条件筛选不同内部路径中的XPATH元素,java,xpath,Java,Xpath,团队成员,我正在学习多个XPATH教程,但无法使用一个XPathExpression实现以下期望 如何获取AccountNumber=AC-12..的PostPaid信息-->活动值和日期值 <params> <param> <value> <struct> <member> <name>PrepaidIn

团队成员,我正在学习多个XPATH教程,但无法使用一个XPathExpression实现以下期望

如何获取AccountNumber=AC-12..的PostPaid信息-->活动值和日期值

<params>
    <param>
        <value>
            <struct>
                <member>
                    <name>PrepaidInformation</name>
                    <value>
                        <struct>
                            <member>
                                <name>activationStatus</name>
                                <value>
                                    <boolean>1</boolean>
                                </value>
                            </member>
                        </struct>
                    </value>
                </member>
                <member>
                    <name>MixedInformation</name>
                    <value>
                        <struct>
                            <member>
                                <name>activationStatus</name>
                                <value>
                                    <boolean>0</boolean>
                                </value>
                            </member>
                        </struct>
                    </value>
                </member>
                <member>
                    <name>PostpaidInformation</name>
                    <value>
                        <array>
                            <data>
                                <value>
                                    <struct>
                                        <member>
                                            <name>ActiveValue</name>
                                            <value>
                                                <string>60</string>
                                            </value>
                                        </member>
                                        <member>
                                            <name>Date</name>
                                            <value>
                                                <string>20170225T12:00:00</string>
                                            </value>
                                        </member>
                                        <member>
                                            <name>AccountNumber</name>
                                            <value>
                                                <i4>AC-12</i4>
                                            </value>
                                        </member>
                                    </struct>
                                </value>
                                <value>
                                    <struct>
                                        <member>
                                            <name>ActiveValue</name>
                                            <value>
                                                <string>23</string>
                                            </value>
                                        </member>
                                        <member>
                                            <name>Date</name>
                                            <value>
                                                <string>20170225T12:00:00</string>
                                            </value>
                                        </member>
                                        <member>
                                            <name>AccountNumber</name>
                                            <value>
                                                <i4>AC-13</i4>
                                            </value>
                                        </member>
                                    </struct>
                                </value>
                            </data>
                        </array>
                    </value>
                </member>
            </struct>
        </value>
    </param>
</params>
实际答案来自

安德森是

//member/name[text()="PostpaidInformation"]/following-sibling:: 
value/array/data/value/struct[member[name="AccountNumber"]/value/i4="AC-12"] 
har07是

//member[name='PostpaidInformation']//struct[member[name='AccountNumber' and value/i4='AC-12']]/member
你能试试吗

//member/name[text()="PostpaidInformation"][1]/following-sibling::value/array/data/value/struct/member
XPath
应返回3个
成员
节点:

<member>
    <name>ActiveValue</name>
    <value>
         <string>60</string>
    </value>
</member>
<member>
   <name>Date</name>
   <value>
        <string>20170225T12:00:00</string>
   </value>
</member>
<member>
   <name>AccountNumber</name>
   <value>
        <i4>AC-12</i4>
   </value>
</member>

这是一种可能的XPath(为了可读性而包装):

简要说明:

  • //成员[name='postaidinformation']
    :搜索
    成员
    元素,其中
    名称
    子值等于'postaidinformation'

  • //struct[member[name='AccountNumber'和value/i4='AC-12']
    :在这样的
    成员
    元素中,搜索包含子元素
    成员
    的后代
    结构
    元素,其中
    名称
    等于'AccountNumber',
    值/i4
    等于'AC-12'

  • /member
    :从该
    结构
    返回名为
    成员的所有子元素


您能用希望得到的确切输出更新问题吗?@Andersson更新了Q。我只需要一个名为name=PrepaidInformation../array/data/value/struct for AccountNumber=AC-12的节点集。谢谢!那么AC-12在阵列中的匹配点在哪里。。?我认为[1]是数组的索引。。?那么我不确定AC-12是否总是数组索引[1]。请提供帮助。您的意思是,仅当以下兄弟姐妹拥有账号=
“AC-12”
时,您才希望首先匹配
后援信息
?否。后援信息将仅为一个。但它包含多个帐户。其中,如何匹配帐号为“AC-12”的帐户。这是否有什么作用呢?
//member/name[text()=“postaidinformation”][1]/下面的兄弟姐妹::value/array/data/value/struct[./member/value/i4=“AC-12”]/member
?当然我会在2分钟内检查并回复您,但[1]在
text()=“postaidinformation”][1]这里是什么
谢谢你的解释。你的解释很简洁:)
<member>
    <name>ActiveValue</name>
    <value>
         <string>60</string>
    </value>
</member>
<member>
   <name>Date</name>
   <value>
        <string>20170225T12:00:00</string>
   </value>
</member>
<member>
   <name>AccountNumber</name>
   <value>
        <i4>AC-12</i4>
   </value>
</member>
//member/name[text()="PostpaidInformation"]/following-sibling::value/array/data/value/struct[member[name[.="AccountNumber"]/following-sibling::value/i4="AC-12"]]
//member[name='PostpaidInformation']
//struct[member[name='AccountNumber' and value/i4='AC-12']]
/member