测试用例属性的优先级

时间:2014-08-26 15:39:21

标签: xml xslt xsd

尝试使用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>

1 个答案:

答案 0 :(得分:1)

attribute(name, type)模式中的类型是属性的类型,而在示例中,CCCtypeXXXtype类型是元素的类型属性属于。对于“CCCtype类型元素的任何属性”,您需要

element(*, CCCtype)/@*

以及“类型为attr6

的任何元素的XXXtype属性
element(*, XXXtype)/@attr6

这两种模式都具有相同的默认优先级,但它们无法匹配相同的节点,因为两种类型之间没有继承关系 - 元素不能同时为CCCtype和{{1}在同一时间。

最后不言而喻,这将需要一个架构感知的XSLT 2.0处理器,如Saxon-EE。