Java 获取子标记具有属性x的属性
考虑一下这个XML文件结构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
...
<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文档,那个么我将坚持使用第一种方法。