gpt4 book ai didi

c# - 带有 Saxon API 的 XQuery/XPath - 需要不区分大小写的路径

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:59 25 4
gpt4 key购买 nike

简单地说,我希望下面的所有路径都评估为相同的值:

  • /root/item1/text()
  • /ROOT/ITEM1/text()
  • /根目录/Item1/text()

据我了解,想法是大小写不同的 XML 节点实际上被视为不同的。这里的问题是我正在构建一个基于一组关系 SQL 数据库表的动态 XML 构建器。该应用程序将安装在 50 多台不同的服务器上,它们都有自己的 SQL 实例。 50% 的表结构、名称和类型会有所不同,而另外 50% 的表名称的字母大小写可能会有所不同。目标是将标准 XQuery 转换应用于这些动态生成的 XML 文件,这些文件具有自定义和标准部分,标准意味着它适用于所有 50 多个服务器。这就是为什么我正在寻找不区分大小写的路径逻辑,即使它违背了 XML 的基本原理,它也会为我们的用例“选择”这样的能力提供巨大的好处。

我目前为测试准备的一个有用的解决方法是使用 XSLT 进行预转换,将所有元素节点名称转换为小写。因此,如果没有任何结果,那么至少它仍然是可行的。

我是 XQuery/XPath/XSLT 的新手,所以命名空间对我来说仍然是一个陌生的概念。我偶然发现的一件事是声明排序规则。但是我不知道这是否仅用于典型的字符串比较($x = $y)或其他类似的事情。 Saxon 有一个名为 Processor.DeclareCollat​​ion() 的处理器内置方法,我尝试使用它,但我没有注意到查询运行有任何不同。

整理是我的答案吗,只是如何设置它的问题(在此之前从未真正搞砸过它)?还有另一种方法可以解决这个问题吗?还是我应该坚持现有的解决方案?

*附言具有不区分大小写的函数名称也将是一个很棒的奖励 [text() vs TEXT()] 但我可以没有它,这将有助于我团队中的小白经历更少的错误。 :)

最佳答案

这个 XPath,

/*[lower-case(name()) = "root"]/*[lower-case(name()) = "item1"]/text()

将以不区分大小写的方式覆盖您的示例。

注意事项:

  1. 请不要这样做。XML 在设计和标准化方面区分大小写。
  2. 不,不存在声明不区分大小写的全局方式。参见 #1。
  3. 不,标准不应该屈服于特殊的设计;特殊的设计应该屈服于它。

关于c# - 带有 Saxon API 的 XQuery/XPath - 需要不区分大小写的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52415539/

25 4 0
文章推荐: css - id ="this"在 href 链接到 css 样式表?
文章推荐: javascript - <* 文本对齐 :justify *> functionality For divs (boxs)
文章推荐: css - HTML
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com