fsc*_*ore 2 xml xslt schema xslt-2.0
我正在研究XSLT并从规范中找到优先事项:http://www.w3.org/TR/xslt20/#conflict
我想知道为什么以下将用于:
schema-element(E) 0.25 (matches by substitution group and type)
schema-attribute(A) 0.25 (matches by name and type)
Run Code Online (Sandbox Code Playgroud)
为什么我要匹配架构元素或属性?有什么用?
schema-element()非常有用,因为您可以匹配替换组的所有成员; 如果你正在使用一个充分利用替换组的模式,那么这确实非常方便.(但schema-attribute()的用处非常少,因为很少有模式使用全局属性声明).
编写模式感知代码的最大好处是调试更容易:因为系统有更多关于XML结构的信息,所以当你出错时它可以为你提供编译时诊断.
例如,如果你写
<xsl:template match="schema-element(books)">
<xsl:value-of select="books/@title"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
然后,模式感知的XSLT处理器可能会检测到模式不允许有效的"books"元素具有名为"books"的子元素,因此它可以在编译样式表时提醒您此错误.如果你只是写了match ="books",那么就没有指向架构信息的链接,因此这种推断是不可能的.你会遇到经典问题,找出你的样式表没有产生输出的原因.
虽然在大多数情况下它可能会很小,但可能会有一些性能优势,并且可能会因验证源文档的额外成本而被取消.