尝试使用TXE 2.0规范在XSL中实现匹配功能,以解决模板规则的冲突。基本上想要检查优先级,并想知道是否为了以下属性我做错了什么,因为我没有得到结果。想在我的匹配声明中执行以下操作:
attribute(*, T) whose priority is 0
attribute(A, T) whose priority is 0.25
有关优先事项的更多信息:http://www.w3.org/TR/xslt20/#conflict
希望我的匹配语句能够通过上述2个属性,因此我应该做出哪些更改来帮助我实现结果。所以基本上我想要一些测试用例传递我的匹配语句以上2个属性
我的努力:
这是我的XML:
<CCC>ccc1</CCC>
<CCC attr2="1">ccc2</CCC>
<XXX>XXX1</XXX>
<XXX attr6="1">XXX10</XXX>
XSL:
<xsl:template match="attribute(*, CCCtype)">
<match>CCC type: <xsl:value-of select="."/></match>
</xsl:template>
<xsl:template match="attribute(attr6, XXXtype)">
<match>attr 6 with XXX: <xsl:value-of select="."/></match>
</xsl:template></xsl:template>
架构:
<xsd:element name="XXX" type="XXXtype"></xsd:element>
<xsd:complexType name="XXXtype">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="attr6" type="xsd:string" use="optional"></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="CCC" type="CCCtype"></xsd:element>
<xsd:complexType name="CCCtype">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="attr2" type="xsd:string" use="optional"></xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
答案 0 :(得分:1)
attribute(name, type)
模式中的类型是属性的类型,而在示例中,CCCtype
和XXXtype
类型是元素的类型属性属于。对于“CCCtype
类型元素的任何属性”,您需要
element(*, CCCtype)/@*
以及“类型为attr6
XXXtype
属性
element(*, XXXtype)/@attr6
这两种模式都具有相同的默认优先级,但它们无法匹配相同的节点,因为两种类型之间没有继承关系 - 元素不能同时为CCCtype
和{{1}在同一时间。
最后不言而喻,这将需要一个架构感知的XSLT 2.0处理器,如Saxon-EE。