【发布时间】:2016-04-05 11:36:26
【问题描述】:
我正在 VBscript 中使用具有 XPath 以返回匹配节点信息的应用程序。
为了使它不区分大小写,我使用了翻译功能。有一个变量保存要搜索的值(比如 v_Search)。在我实现 translate() 之后,它不会返回匹配的节点,而是返回 XML 中的所有节点。
XPath 下方返回正确信息,但区分大小写;-
//*[contains(., '"& v_search &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']
为了不区分大小写,我实现了translate(),但它无法检查匹配结果。下面是表达式:-
//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') , v_search)]/ancestor-or-self::*/*[local-name()='name' and @locale='en']
我无法弄清楚出了什么问题..
此表达式返回 xml 文档中的所有内容。
我已经尝试过
'"& v_search &"',在这种情况下它没有给出任何结果。
编辑找出问题后
//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), translate('"& v_search &"', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]/ancestor-or-self::*/*[local-name()='name' and @locale='en']
它仍然不只返回匹配的节点。但是它现在不返回整个 xml 节点。
编辑:- 示例 Xml
<root xmlns="https://jlkjsdlfjl/">
<name>Accounts</name>
<property name="included" type="hidden">true</property>
<locales>
<locale>en</locale>
<locale>de</locale>
</locales>
<defaultLocale>en</defaultLocale>
<searchspace>
<name locale="en">Accounts</name>
<name locale="de">Accounts</name>
<lastChanged>2014-03-05T18:47:30</lastChanged>
<lastChangedBy>userx</lastChangedBy>
<property name="included" type="hidden">true</property>
<searchspace>
<name locale="en">Database L</name>
<name locale="zw">Database L</name>
<searchSubject status="valid">
<name locale="en">SName1</name>
<name locale="zw">qskxyz</name>
<searchItem>
<name locale="en">IName1</name>
<name locale="zw">qixyz</name>
<hello>v_search</hello>
</searchItem>
<searchItem>
<name locale="en">IName2</name>
<name locale="zw">abc</name>
v_search
</searchItem>
<searchItem>
<name locale="en">IName3</name>
<name locale="zw">def</name>
<hello>something else</hello>
</searchItem>
</searchSubject>
</searchspace>
</searchspace>
<searchspace>
<name locale="en">Names</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<searchspace>
<name locale="en">Database Layer</name>
<name locale="zw">Database Layer</name>
<searchSubject status="valid">
<name locale="en">SName2</name>
<searchItem>
<name locale="en">IName4</name>
<hello>...Hi there..</hello>
</searchItem>
</searchSubject>
</searchspace>
</searchspace>
</root>
示例结果:
帐户、数据库 L、SName1、IName 1
--------, ----------, --------, IName 2
这两个层次结构包含v_search文本....其他人不应该来。
【问题讨论】:
-
添加翻译后,我不明白您为什么在“祖先或自我”之前执行“//”。这将使您所有的孩子都遵守一个条件以及每个孩子的祖先。
-
这是一个错误......仍然有问题......我正在编辑问题。
-
在您的 xml 中没有主节点,但 xpath 正在过滤器中寻找它们。 (local-name()='home')
-
抱歉,我刚刚将“home”节点替换为“name”
-
你在这个线程的过程中做了这么多的小修正,最好从一个新问题重新开始。使问题可重现,因此任何人都可以获取您的代码和数据,看看他们是否得到相同的结果。