Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 获取子标记具有属性x的属性_Java_Xml_Xpath - Fatal编程技术网

Java 获取子标记具有属性x的属性

Java 获取子标记具有属性x的属性,java,xml,xpath,Java,Xml,Xpath,考虑一下这个XML文件结构 ... <sometag attr="foobar"> <subtag> <subsubtag someattr="foo" /> <subsubtag someattr="bla" /> <subsubtag someattr="bar" /> </subtag> </sometag> ... 目前,我有一个XPath

考虑一下这个XML文件结构

...
<sometag attr="foobar">
    <subtag>
        <subsubtag someattr="foo" />
        <subsubtag someattr="bla" />
        <subsubtag someattr="bar" />
    </subtag>
</sometag>
...
目前,我有一个XPath查询:/sometag/subtag/subsubtag[@somettr='foo'],它获取这些子子标签。是否可以从此查询中获取attr=foobar?所以我想让所有的attr都来自sometag,其中xml文件上有一个子标记somettr=foo。

<root>
<sometag attr="foobar1"> 
  <subtag> 
    <subsubtag someattr="foo"/>  
    <subsubtag someattr="bla"/>  
    <subsubtag someattr="bar"/> 
  </subtag> 
</sometag>
<sometag attr="foobar2"> 
  <subtag> 
    <subsubtag someattr="foo"/>  
    <subsubtag someattr="bla"/>  
    <subsubtag someattr="bar"/> 
  </subtag> 
</sometag>
<sometag attr="foobar3">
    <subtag>
        <subsubtag someattr="f2342oo" />
        <subsubtag someattr="bla" />
        <subsubtag someattr="bar" />
    </subtag>
</sometag>
</root>
我对进行了快速测试,它似乎对我有效。

关于xml文件:

<root>
<sometag attr="foobar1"> 
  <subtag> 
    <subsubtag someattr="foo"/>  
    <subsubtag someattr="bla"/>  
    <subsubtag someattr="bar"/> 
  </subtag> 
</sometag>
<sometag attr="foobar2"> 
  <subtag> 
    <subsubtag someattr="foo"/>  
    <subsubtag someattr="bla"/>  
    <subsubtag someattr="bar"/> 
  </subtag> 
</sometag>
<sometag attr="foobar3">
    <subtag>
        <subsubtag someattr="f2342oo" />
        <subsubtag someattr="bla" />
        <subsubtag someattr="bar" />
    </subtag>
</sometag>
</root>

我对它进行了快速测试,它似乎对我有效。

我刚刚发现了另一种可能性:

/sometag/subtag/subsubtag[@someattr='foo']/../../@attr

你可以用。。选择父节点。你需要进入hirachie并选择属性。

我刚刚发现的另一种可能性:

/sometag/subtag/subsubtag[@someattr='foo']/../../@attr
/sometag[subtag/subsubtag[@someattr="foobar"]]/@attr
你可以用。。选择父节点。你需要进入hirachie并选择属性

/sometag[subtag/subsubtag[@someattr="foobar"]]/@attr
或者更严格地说:

//sometag[//子子标签[@somettr=foobar]]/@attr

或者更严格地说:

//sometag[//子子标签[@somettr=foobar]]/@attr


不,我首先犯了一个错误,我选择了整个sometag元素,不仅是@attr;在写完整的答案之前,我必须做一些测试,我不希望我的错误答案在这段时间内被看到。奇怪。。。因为我想接受它,然后我收到一条错误消息,答案已被删除…不,我首先犯了一个错误,我选择了整个sometag元素,不仅是@attr;在写完整的答案之前,我必须做一些测试,我不希望我的错误答案在这段时间内被看到。奇怪。。。因为我想接受它,然后我收到一条错误消息,答案被删除了…你能说这个方法比另一个更快吗?XPath编译器中是否存在差异,或者他是否会将其简化为相同的AST?在大多数情况下,第一种方法比第二种方法更快,这取决于特定的XPath引擎,因为在第二种方法中,一些XPath引擎将遍历更多节点以查找标记。你必须用第一个还是第二个?视情况而定。若它是HTML树,那个么我将使用第二个,因为我不希望每次HTML布局更改时都更改XPath表达式。如果它是XML文档,那么我会坚持使用第一种方法。你能说这种方法是否比另一种更快?XPath编译器中是否存在差异,或者他是否会将其简化为相同的AST?在大多数情况下,第一种方法比第二种方法更快,这取决于特定的XPath引擎,因为在第二种方法中,一些XPath引擎将遍历更多节点以查找标记。你必须用第一个还是第二个?视情况而定。若它是HTML树,那个么我将使用第二个,因为我不希望每次HTML布局更改时都更改XPath表达式。若它是XML文档,那个么我将坚持使用第一种方法。