Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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在XML中标识节点的xpath?_Java_Xml_Xpath - Fatal编程技术网

如何使用Java在XML中标识节点的xpath?

如何使用Java在XML中标识节点的xpath?,java,xml,xpath,Java,Xml,Xpath,我在树视图中填充了一个XML。当我单击某个特定节点时,我需要获取该特定节点的XPath。下面是示例XML。我已经试着写了一些代码,但是我没有得到确切的路径。请帮我解决它 <?xml version="1.0" encoding="UTF-8"?> <hierarchy rotation="0"> <android.widget.FrameLayout index="0" text="" resource-id="" class="android.widget

我在树视图中填充了一个XML。当我单击某个特定节点时,我需要获取该特定节点的XPath。下面是示例XML。我已经试着写了一些代码,但是我没有得到确切的路径。请帮我解决它

    <?xml version="1.0" encoding="UTF-8"?>
<hierarchy rotation="0">
<android.widget.FrameLayout index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" instance="0">
<android.widget.LinearLayout index="0" text="" resource-id="" class="android.widget.LinearLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" instance="0">
<android.widget.FrameLayout index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" instance="1">
<android.widget.TextView index="0" text="Tank" resource-id="android:id/title" class="android.widget.TextView" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" instance="0"/>
</android.widget.FrameLayout>
<android.widget.FrameLayout index="1" text="" resource-id="android:id/content" class="android.widget.FrameLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,100][768,1184]" instance="2">
<android.widget.LinearLayout index="0" text="" resource-id="com.test.Test:id/loginView" class="android.widget.LinearLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,100][768,1184]" instance="1">
<android.widget.ImageView index="0" text="" resource-id="" class="android.widget.ImageView" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[106,120][661,291]" instance="0"/>
<android.widget.LinearLayout index="1" text="" resource-id="" class="android.widget.LinearLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,291][768,407]" instance="2">
<android.widget.EditText index="0" text="Username" resource-id="com.test.Test:id/usernameTextField" class="android.widget.EditText" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[20,311][748,407]" instance="0"/>
</android.widget.LinearLayout>
<android.widget.LinearLayout index="2" text="" resource-id="" class="android.widget.LinearLayout" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,407][768,523]" instance="3">
<android.widget.EditText NAF="true" index="0" text="" resource-id="com.test.Test:id/passwordTextField" class="android.widget.EditText" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="true" selected="false" bounds="[20,427][748,523]" instance="1"/>
</android.widget.LinearLayout>
<android.widget.Button index="3" text="Login" resource-id="com.test.Test:id/loginButton" class="android.widget.Button" package="com.test.Test" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[224,543][544,639]" instance="0"/>
</android.widget.LinearLayout>
</android.widget.FrameLayout>
</android.widget.LinearLayout>
</android.widget.FrameLayout>
</hierarchy>
我需要xpath输出,如下所示

//android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.LinearLayout[1]/android.widget.Button[1]

获取要获取的
xpath
节点,并将此函数应用于获取其
xpath

private String getXPath(Node node) {
    Node parent = node.getParent();
    if (parent == null) {
        return "/" + node.getTagName();
    }
    return getXPath(parent) + "/" + node.getTagName();
}

map
从何而来?map是全局声明的。没有“特定节点的XPath”。任何给定节点都有许多XPath表达式。我猜您正在寻找一个只选择那个节点,并且相当简洁的节点?对于XML的更改,它需要有多强大?谢谢。但假设某个节点有两个子节点,我需要数组专门指向该节点,否则下面的答案对我适用。我从下面的链接中得到了解决方案您在return语句中只将一个参数传递给getXPath(),但函数需要两个参数。谢谢。但假设某个节点有两个子节点,我将需要数组专门指向该节点。例如://android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.LinearLayout[1]/android.widget.Button[1]@user3355101:很好,您已经提供了所需XPath类型的示例。你能把这个加到原来的问题上吗?
private String getXPath(Node node) {
    Node parent = node.getParent();
    if (parent == null) {
        return "/" + node.getTagName();
    }
    return getXPath(parent) + "/" + node.getTagName();
}