尝试匹配另一个元素的同级元素之后的元素时发生XSLT错误
我很难匹配另一个元素的后续同级元素尝试匹配另一个元素的同级元素之后的元素时发生XSLT错误,xslt,xpath,Xslt,Xpath,我很难匹配另一个元素的后续同级元素 <w:p> <w:r> <w:rPr> <w:color w:val="002D56"/> <w:sz w:val="44"/> <w:szCs w:val="44"/> </w:rPr> <w:t>I want to match this
<w:p>
<w:r>
<w:rPr>
<w:color w:val="002D56"/>
<w:sz w:val="44"/>
<w:szCs w:val="44"/>
</w:rPr>
<w:t>I want to match this...</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:cstheme="minorHAnsi"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
<w:t>...but I don't want to match this.</w:t>
</w:r>
</w:p>
我想匹配这个。。。
……但我不想和这个相提并论。
与
。。。
我正在查找前面的同级(上面示例中的第一个w:rPr元素),但是如果我尝试
<xsl:template match="w:rPr[w:sz[@w:val='44']]/following-sibling::w:t"> ...
。。。
我得到一个模式编译失败的错误(xsltparserror:xsltCompilePattern:failed to compile
)
我假设问题出在XPath上,但我不知道是什么。建议?尝试颠倒您的逻辑,并匹配
w:t
,其前面的兄弟姐妹是与您的条件匹配的w:rPr
<xsl:template match="w:t[preceding-sibling::w:rPr[w:sz/@w:val='44']]">
我在这里有时会用到另一种方法,即定义包含特定类型的所有节点的全局变量,然后在模式中使用这些全局变量。例如:
<xsl:variable name="wonderElements"
select="//w:rPr[w:sz[@w:val='44']]/following-sibling::w:t"/>
XSLT2.0:
<xsl:template match="*[. intersect $wonderElements]"/>
XSLT 3.0:
<xsl:template match="$wonderElements"/>
XSLT1.0官方不允许在匹配模式中使用全局变量,尽管我相信一些处理器取消了这一限制。您的两个XPath似乎都很好。你能公布全部错误吗?您是否定义了命名空间
w
?XSLT模式语法是XPath表达式语法的一个子集。不能使用以下同级轴(谓词内除外,其中允许使用完整XPath)
<xsl:template match="*[. intersect $wonderElements]"/>
<xsl:template match="$wonderElements"/>