在XSLT期间从ScheSD复制VALUE的任何方法(Schema Aware XSLT 2.0 ala Post-Schema-Validation Infoset))?

时间:2012-05-02 09:54:58

标签: xml xsd transformation xslt-2.0

我正在尝试将一个Attribute值从架构中的一个元素复制到XSLT输出。 我尝试了copy-of,并使用schema-element访问了很多例子,但它似乎只用于匹配或复制整个节点结构......

总结一下,我想利用xslt xsd意识来做相当于为属性分配默认值的Post-Schema-Validation Infosetway

XML

     <MyProject Val="wrongval">

XSD

     <xs:element name="MyProject">
       <xs:complexType>
         <xs:attribute name="Val" fixed="1234" />
       </xs:complexType>
     </xs:element>

XSLT

    <xsl:template match="/">
       <xsl:element name="MyProject">
          <xsl:attribute name="Val">**???=1234**</xsl:attribute>
       </xsl:element>
    </xsl:template>

1 个答案:

答案 0 :(得分:3)

你快到了。给出以下(未使用的)源文档:

<MyProject Val="wrongval"/>

以及以下架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

     <xs:element name="MyProject">
       <xs:complexType>
         <xs:attribute name="Val" fixed="1234" />
       </xs:complexType>
     </xs:element>

</xs:schema> 

和以下样式表:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import-schema schema-location="test.xsd"/>

    <xsl:template match="/">
       <xsl:element name="MyProject" validation="strict"/>
    </xsl:template>

</xsl:stylesheet>

转换输出为:

<?xml version="1.0" encoding="UTF-8"?><MyProject Val="1234"/>