2012-05-02 77 views
2

我正試圖將屬性值從架構中的一個元素複製到XSLT輸出。 我嘗試了copy-of,並訪問了很多schema-element的例子,但它似乎只用於匹配或複製整個節點結構......在XSLT(架構感知XSLT 2.0 ala後架構驗證Infoset)期間從XSD複製VALUE的任何方式)?

總結一下,我想利用xslt xsd意識這樣做後架構驗證Infosetway到屬性

XML

 <MyProject Val="wrongval"> 

XSD

0分配默認值相當於
 <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> 

回答

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"/> 
+0

這是一個完美的答案,但我爲可以說這是我的問題的一個簡單例子。如果xsd用於輸出xslt而不是輸入,那麼會發生什麼情況,因此名稱必須更改。基本上,如果示例相同,但數據文件中MyProject元素的名稱是MyBusinessProject,並且其他所有內容都保持不變? – Whimusical

+0

您可以將模式驗證應用於輸入或輸出,或者甚至應用於處理過程中創建的中間結構。在每種情況下,模式驗證都會爲擁有它們的屬性(和元素)添加默認值。 –

+1

這不適合我使用Altova XMLSpy 2011 ...我得到沒有任何默認值或固定值。 任何提示? – Vlax