xml - XPath中的逻辑或?为什么不加工?

标签 xml xslt xpath xsl-fo dita

我有一个XSLT模板,该模板可对各个级别的主题进行计数,用于在我拥有的DITA项目中为这些主题加上编号。

<xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> 
    <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> 
</xsl:template> 


我试图在计数之外添加其他排除项,例如,当topicref类具有title元素与outputclassnoNum元素时。

<xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> 
    <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')] | *[contains(title/@outputclass, 'noNum')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> 
</xsl:template> 


如上所示,我在第一个| *[contains(title/@outputclass, 'noNum')]语句之后添加了not,以为这是附加条件,在这种情况下,调用模板时count调用将跳过(即...不是祖先或-带有[条件]的自我或标题输出类属性为'noNum'的主题...)。但是,看来我添加的条件被视为模板确实匹配并依赖的东西。

假设我在最后一点上是正确的,我相信我需要将该条件放在它自己的“ not”语句中,但是我不确定如何使用XPath中已经存在的条件来做到这一点。

最佳答案

在XPath中,|是集合联合运算符,而不是逻辑OR。

联合运营商,|

XPath 1.0


|运算符计算其操作数的并集,该操作数必须是节点集。


XPath 2.0+


union|运算符是等效的。它们将两个节点序列作为操作数,并返回一个序列,其中包含在两个操作数中出现的所有节点。




逻辑或,or

使用or代替logical OR



复杂的XPath仍然无法正常工作?

将其分解为较小的部分:


//*[contains(@class, ' bookmap/chapter ')]是否选择您所期望的?分别对逻辑表达式的每个最基本部分重复。
一次组合那些经过单独验证的术语或谓词,并观察到此过程中的每一步都不会感到意外。
在合并其他条款之前,请修复预期结果与实际结果之间的任何差异。

关于xml - XPath中的逻辑或?为什么不加工?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52900626/

相关文章:

html - 为什么我的 XML 页面不显示转换后的元素?

xml - 根据 XSL 中的条件动态输出元素?

javascript - 通过 (JavaScript) 在 IE 中将样式表 (XSL) 应用于 (XML) 时出现问题

xpath - 如何在 XPath 中使用不同时区标准化日期存储?

c# - 使用 XPath 排序 - 不是 XSL

xpath - mule 从 json 有效载荷中获取数据

php - 需要帮助解析 xml

c# - 在使用 C# XmlWriter 制作的 XML excel 文档的单元格中显示多行文本值

xml - XPath 语法 - 如何在复杂的位置路径中使用 position()

xml - Xpath从兄弟节点的父节点获取值