【发布时间】:2016-02-29 07:44:03
【问题描述】:
我有一个 xml 文档,其中有固定的结构,但深度是不同的,例如:-
- 有主节点
<project>。- 它有可能重复多次的子节点
<namespace>。在<namespace>之前或之后可能会出现一些新标签。
<project>
<newtag>
<namespace>
<namespace>
..........
</namespace>
</namespace>
</newtag>
</project>
- 在多个命名空间之后,还有两个我感兴趣的标签
<querySubject>和<queryItem>
我正在使用特定 XPATH 搜索 queryItem 标记中的文本:-
/project/namespace/namespace/querySubject/queryItem[contains(., 'searchTerm')]/ancestor-or-self::*/name
对于下面给出的特定结构,我的 Xpath 运行良好:-
<project>
<namespace>
<name locale="en">Test</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<namespace>
<name locale="en">Database Layer</name>
<querySubject status="valid">
<name locale="en">qskxyz</name>
<queryItem>
<name locale="en">qixyz</name>
<hello>searchTerm</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
<namespace>
<name locale="en">Test</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<namespace>
<name locale="en">Database Layer</name>
<querySubject status="valid">
<name locale="en">qsxyz</name>
<queryItem>
<name locale="en">myName</name>
<hello>...Hi there..</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
</project>
但如果有上述几点所述的变化,则无法正常工作。任何建议
编辑 1.
我的观察中有一些遗漏
我的实际项目标签是
<project containsDynamicContent="false" xmlns="http://www.developer.cognos.com/schemas/bmt/60/7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.developer.cognos.com/schemas/bmt/60/7 BMTModelSpecification.xsd">
但是在开发中我采取简单的<project></project>
这是有影响的,我的 Xpath 无法正常工作。 我在 Xpath 下尝试过的任何建议,但这也不起作用,我无法更改我的 xml 标签。 我已经尝试过这个 xpath :-
//namespace//querySubject/queryItem[contains(.,'searchTerm')]/ancestor-or-self::*/name
【问题讨论】:
-
“我正在使用特定 XPATH 搜索 queryItem 标记中的文本” > 但您的 xpath 表达式选择所有
name祖先节点(或自节点)您选择的queryItem。这是矛盾的。 -
是的,我正在搜索文本,然后返回所有祖先名称以追踪它