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_,其中该名称空间是一个文字常量,然后应用生成的样式表。 –