Java 如何在vtd xml中获取父元素?

Java 如何在vtd xml中获取父元素?,java,xpath,vtd-xml,Java,Xpath,Vtd Xml,我有一个xpath查询,可以得到所有属性及其各自的值 但是现在我想知道这些属性属于哪个元素 这是我的xml: <?xml version='1.0' encoding='UTF-8'?> <osm version="0.6" generator="osmconvert 0.5Z"> <bounds minlat="51.60542" minlon="-0.1854331" maxlat="51.69193" maxlon="-0.0088394"/>

我有一个xpath查询,可以得到所有属性及其各自的值

但是现在我想知道这些属性属于哪个元素

这是我的xml:

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmconvert 0.5Z">
<bounds minlat="51.60542" minlon="-0.1854331" maxlat="51.69193" maxlon="-0.0088394"/>
    <node id="195870" lat="51.6844148" lon="-0.1772914" version="4" timestamp="2008-10-07T19:42:43Z" changeset="136213" uid="508" user="Welshie">
        <tag k="highway" v="motorway_junction"/>
        <tag k="ref" v="24"/>
    </node>
<node id="33206602" lat="51.6084884" lon="-0.0365496" version="4" timestamp="2011-09-23T16:54:00Z" changeset="9378015" uid="28024" user="dbisping">
        <tag k="amenity" v="fuel"/>
        <tag k="fuel:biodiesel" v="yes"/>
        <tag k="fuel:biogas" v="no"/>
        <tag k="fuel:cng" v="no"/>
        <tag k="fuel:diesel" v="no"/>
        <tag k="fuel:hydrogen" v="no"/>
        <tag k="fuel:lpg" v="no"/>
        <tag k="fuel:octane_100" v="no"/>
        <tag k="fuel:octane_95" v="no"/>
        <tag k="fuel:octane_98" v="no"/>
        <tag k="name" v="Pure Fuels"/>
        <tag k="self_service" v="no"/>
    </node>
    </osm>

那么vn.toElement(vn.PARENT)呢?

我也有同样的问题,我无法处理它(我也在处理OSM数据)

我使用了一种方法,但我认为它对于像OSM这样的大量数据是无效的

我试图以各种方式获取节点,当我看到节点时,我尝试获取其父id

int wayIndex = 1;

        while (way_id_counter != -1)
        {
            start = System.currentTimeMillis();
            wayID = vn.toString(way_id_counter+1);
            apSubNode_id.resetXPath();
            apSubNode_id.selectXPath("//way[" + wayIndex +"]/nd/@ref");
            way_node_id_counter = apSubNode_id.evalXPath();

            while (way_node_id_counter != -1)
            {
                subNodeID = vn.toString(way_node_id_counter+1);
                //System.out.println("Sub node id is " + subNodeID);
                way_node_id_counter = apSubNode_id.evalXPath();
            }
            wayIndex++;
            way_id_counter = apWay_id.evalXPath();
            //System.out.println("Way id is " + wayID);
            //break;
            end = System.currentTimeMillis();
            System.out.println(end - start);
        }
它是嵌套的(在您的案例中,首先搜索方法,然后搜索此方法中的节点或此方法中的标记,但我到目前为止还没有找到一个好的解决方案)


希望它有帮助

那么您想知道您正在分析的项目的@id吗?如果这就是您要查找的全部内容,请尝试ap.selectXPath(../@id)。如果是其他内容,请尝试为您发布的xml添加before/after的片段。
int wayIndex = 1;

        while (way_id_counter != -1)
        {
            start = System.currentTimeMillis();
            wayID = vn.toString(way_id_counter+1);
            apSubNode_id.resetXPath();
            apSubNode_id.selectXPath("//way[" + wayIndex +"]/nd/@ref");
            way_node_id_counter = apSubNode_id.evalXPath();

            while (way_node_id_counter != -1)
            {
                subNodeID = vn.toString(way_node_id_counter+1);
                //System.out.println("Sub node id is " + subNodeID);
                way_node_id_counter = apSubNode_id.evalXPath();
            }
            wayIndex++;
            way_id_counter = apWay_id.evalXPath();
            //System.out.println("Way id is " + wayID);
            //break;
            end = System.currentTimeMillis();
            System.out.println(end - start);
        }