我正在使用XSLT 2.0來轉換XML架構。第一個模式(s1.xsd)進口第二架構(s2.xsd)如下:使用XSLT合併兩個xml架構
s1.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="URI1" targetNamespace="URI2"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<import namespace="URI1" schemaLocation="s2.xsd"/>
<element name="element1"/>
<element name="element2"/>
</schema>
和s2.xsd的內容的內容
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="URI1" targetNamespace="URI1">
<attribute name="attr1"/>
<schema>
我XSLT聲明XS命名空間如下:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
我想s2.xsd的節點合併到<架構>-s1.xsd的元素。到目前爲止,我已經試過
<xsl:template name="merge_imported_schemas">
<xsl:for-each select="/schema/import[@namespace = //namespace::*]">
<!-- file exists? -->
<xsl:choose>
<xsl:when test="boolean(document(@schemaLocation))">
<!-- schema found -->
<xsl:copy-of select="document(@schemaLocation)/*/node()"/>
</xsl:when>
<xsl:otherwise>
<!-- schema not found -->
<xsl:message terminate="yes">
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
,但我沒有得到期望的結果。任何人都可以告訴我我做錯了什麼?我懷疑這裏有一個命名空間衝突,但老實說,我發現使用命名空間有點混亂。謝謝!
我真正想要的是將s2.xsd的內容附加到s1.xsd,然後將s1.xsd解析爲單個文件。據我所知,這是不可能的,但是解決方法包括使用臨時結果樹(請參閱http://www.xml.com/pub/a/2003/12/03/tr.html) 。爲實現這一點,調用 似乎有伎倆。 –
conciliator
2010-05-20 14:14:07