gpt4 book ai didi

xml - contains() 内的 XPath translate() 与动态变量

转载 作者:行者123 更新时间:2023-12-02 20:14:00 25 4
gpt4 key购买 nike

我正在 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']

我无法弄清楚出了什么问题..

  1. This expression returns everything from xml document.

  2. I have already tried '"& v_search &"' in that case it does not give any result.

编辑找出问题后

//*[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>

结果示例:

Accounts, Database L, SName1, IName 1

--------, ----------, -------, IName 2

这两个层级包含 v_search 文本......其他人不应该来。

最佳答案

//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), translate('v_search', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]/ancestor-or-self::*/name[@locale='en']

我在xpathtester中测试了它,结果是:

<name locale="en">Accounts</name>
<name locale="en">Database L</name>
<name locale="en">SName1</name>
<name locale="en">IName1</name>
<name locale="en">IName2</name>

关于xml - contains() 内的 XPath translate() 与动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36425295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com