0
我有一個將一個XSD轉換爲另一個具有稍微不同格式的XSD的XSL。 (基本上,目標文件將被標準化)。目標中的另一個主要區別是添加默認名稱空間和目標名稱空間。我無法實際得到的命名空間這裏是我的XSL的一個片段:。XSL命名空間問題
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:variable name="Unions" select="'Yes'"/>
<xsl:variable name="myname" select="//Table/Name"/>
<xsl:variable name="namespace" select="concat('http://mynamespace/', $myname)"/>
<xsl:template match="/">
<xsl:element name="xsd:schema" namespace="http://www.w3.org/2001/XMLSchema" xmlns="$namespace"
<xsl:attribute name="targetNamespace">
<xsl:value-of select="$namespace"/>
</xsl:attribute>
<xsl:attribute name="elementFormDefault">qualified</xsl:attribute>
<xsl:attribute name="attributeFormDefault">unqualified</xsl:attribute>
...
</xsl:element>
</xsl:template>
</xsl:stylesheet>
而這就是我得到:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://mynamespace/somename" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
...
</xsd:schema>
和xmlns =「$命名空間」的標記到每個子節點。我不是XSLT的絕對專家。我沒有必要自己開發它,因爲BizTalk地圖爲你生成了所有的東西,但是這個XSL比我可以使用BizTalk地圖處理更復雜。
哦,我僅限於XSLT 1.0
我會研究它,看看EXSLT是否是一個選項。一旦我發現它是否是一種選擇,我會考慮是否可以說服我的組織中的人員對此感到滿意。如果不是,那麼簡短的答案是,這是不可能的,因爲我的限制? – TimWagaman
我不認爲這是可能的一次通過xslt 1沒有擴展功能。在純xslt1中可以做的是使用一個樣式表來計算目標名稱空間,然後寫出一個_stylesheet_,其中該名稱空間是一個文字常量,然後應用生成的樣式表。 –