XPath 检查
最后修改时间:2023 年 8 月 24 日XPath 语言实现提供了一些内置检查,可以在交互模式下编写 XPath 表达式以及编写 XSLT 脚本时检查常见的编码错误。这些检查还提供了许多配置选项,可以在“设置”对话框的“检查”页面上进行配置。
在你开始之前
在设置 |安装并启用XPathView + XSLT插件 插件页面,选项卡Marketplace ,如从 JetBrains Marketplace 安装插件中所述。
XPath 类型检查
有两种检查处理 XPath 表达式中的类型转换:隐式类型转换和冗余类型转换。
隐式类型转换
此检查检查预定义 XPath 类型 STRING、NUMBER、BOOLEAN 和 NODESET 之间的任何隐式转换。虽然这通常不是问题,因为标准已明确定义转换,但此检查可以帮助编写更能表达类型的 XSLT 脚本,甚至可以帮助避免细微的错误:
<xsl:if test="foo" />
不等于<xsl:if test="string(foo)" />
第一个测试检查元素foo是否存在 ( count(foo) > 0)
,但是后一个测试仅在元素实际包含任何文本时才为 true string-length(foo) > 0
。然后插件将提供使类型转换更加明确的功能。
有多种选项可以根据个人喜好调整检查,方法是单独启用某些类型之间的隐式转换。
还可以告诉插件始终标记不会导致实际预期类型的显式转换,例如,<xsl:if test="number(foo)" />
并提供一个特殊选项来忽略从 NODESET 到 BOOLEAN 的转换,方法是使用该string()
函数作为写入的快捷方式string-length() > 0
。
冗余类型转换
string()
此检查检查函数、number()
或的任何类型转换是否boolean()
是多余的,换句话说,参数的类型是否与函数返回类型相同,或者表达式的预期类型是否为any类型。虽然这种显式转换有时可能是有意强调类型,但通常可以安全地删除它。
表达式有效性检查
这些检查检查表达式是否包含任何潜在的语义错误,例如引用实例文档中未出现的元素/属性名称或使用可能不匹配任何内容的谓词。
检查节点测试
此检查检查 XPath 表达式中使用的任何元素/属性名称是否实际上是关联 XML 文件的一部分或是否在引用的架构中定义。这有助于避免由 XPath 表达式中的拼写错误引起的问题,否则这些问题可能会在运行脚本时发生,甚至可能无法立即识别。
例子:
<xsl:template match="<emphasis>h:txtarea</emphasis>"/>
如果前缀h绑定到 XHTML 命名空间,则检查会将匹配表达式的这一部分标记为未知元素名称,因为该元素的正确名称是textarea。
索引零使用
此检查检查谓词索引或与函数的比较中是否意外使用零position()
。这几乎总是一个错误,因为在 XPath 中,索引从 1 开始,而不是从 0 开始。
例子:
//someelement[position() = 0]
或者//something[0]
开发自定义 XPath 检查
XPath 检查利用 IntelliJ IDEA 中的常规检查 API。然而,由于 XPath 语言支持的集成方式,这有点复杂。目前,还不可能开发成熟的第 3 方 XPath 检查。虽然理论上可以开发利用 XPath-PSI API 并派生自 的自定义检查org.intellij.lang.xpath.validation.inspections.XPathInspection
,但不建议也不支持这样做。
感谢您的反馈意见!