XSLT序列化完整的XSD
基于中提供的关于序列化的其中一个解决方案,我尝试序列化如下内容XSLT序列化完整的XSD,xslt,serialization,xsd,Xslt,Serialization,Xsd,基于中提供的关于序列化的其中一个解决方案,我尝试序列化如下内容 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" elementFormDefault="qualified"> <xs:annotation> <xs
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" elementFormDefault="qualified">
<xs:annotation>
<xs:documentation>
Package Name: Master
version: 2
Description:
This is a dummy description used for testing purposes.
</xs:documentation>
</xs:annotation>
<!-- ********************************************************************************************************************
*** Includes
*************************************************************************************************************************-->
<!-- Basic Layer -->
<xs:include schemaLocation="dummy1.xsd"/>
<xs:include schemaLocation="dummy2.xsd"/>
<!-- ********************************************************************************************************************
*** Simple Types
*************************************************************************************************************************-->
<xs:simpleType name="YESNO">
<xs:restriction base="xs:string">
<xs:enumeration value="YES"/>
<xs:enumeration value="NO"/>
</xs:restriction>
</xs:simpleType>
<!-- ********************************************************************************************************************
*** Simple Types
*************************************************************************************************************************-->
<xs:complexType name="Custom" xdb:SQLType="L2A_CUSTOM_OT">
<xs:sequence>
<xs:element name="Postal" type="TPostal" />
<xs:element name="Entry" type="Entry" minOccurs="0" maxOccurs="8" />
</xs:sequence>
</xs:complexType>
</xs:schema>
软件包名称:Master
版本:2
说明:
这是用于测试目的的虚拟描述。
由于我刚刚开始使用XSLT,我似乎找不到一个同时包含名称空间和注释的解决方案。为了在不丢失任何信息的情况下按原样包含所有内容,我提出了这个XSLT
<xsl:variable name="xsdresultstring">
<xsl:apply-templates select="$xsdresult" mode="serialize"/>
</xsl:variable>
<!-- any element -->
<xsl:template match="*" mode="serialize">
<xsl:text><</xsl:text>
<xsl:value-of select="name()"/>
<xsl:apply-templates select="@*" mode="serialize" />
<xsl:choose>
<xsl:when test="node()">
<xsl:text>></xsl:text>
<xsl:apply-templates mode="serialize" />
<xsl:text></</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>></xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> /></xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Attributes -->
<xsl:template match="@*" mode="serialize">
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>="</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:template>
<xsl:template match="text()" mode="serialize">
<xsl:value-of select="." />
</xsl:template>
/
/
="
"
<代码> > p>参见纯XSLT 1解决方案或考虑是否可以使用XSLT处理器(如XXPath 3支持XPath 3)来使用<代码>序列化< /代码>函数。< /P>
注意,您所示的方法不关心转义,例如<代码> > p>见纯XSLT 1解决方案,或考虑是否可以使用XSLT处理器(如XXPath 3支持XPath 3)来使用<代码>序列化< /代码>函数。
请注意,如图所示的方法并不考虑转义,例如,您要求使用XSLT编写的序列化程序,但没有说明原因。这里有很高的感染风险。请说明你的最终目标。您将显示一个已经序列化的XSD(显然)。如果要再次序列化,为什么?如果您想以某种方式对其进行处理,然后重新序列化,请使用标识转换——这比在XSLT中编写序列化程序要简单得多,因为它利用XSLT处理器中已经存在的序列化程序。我猜您可能真的想生成一个新的XSD,用引用的XSD替换XSD:includes
。如果是这样的话,你所问的问题最好描述为扁平化而不是序列化。但这只是猜测,我们不应该这么做。你应该把你的问题写得更清楚,这样我们就知道你的目标了。想想我把自己搞糊涂了吧。我尝试增强一些默认xsd,并自动添加一些xdb:SQLType。那么胖,那么好。最终结果应加载到db中,但可变字符串大小不能超过32000个字符。因此,我需要将xsd字符串拆分为几部分。这一部分我也有些工作,但为了让它正常工作,我需要变量中XSD的长度,尝试创建像l_var1这样的文本:='XSD piece1';l_var2:='xsd piece2';插入到制表符(xsd)值(l|var1 | l|var2)中,现在正在寻找获取xsd的正确字符长度的方法。您要求使用XSLT编写序列化程序,但没有说明原因。这里有很高的感染风险。请说明你的最终目标。您将显示一个已经序列化的XSD(显然)。如果要再次序列化,为什么?如果您想以某种方式对其进行处理,然后重新序列化,请使用标识转换——这比在XSLT中编写序列化程序要简单得多,因为它利用XSLT处理器中已经存在的序列化程序。我猜您可能真的想生成一个新的XSD,用引用的XSD替换XSD:includes
。如果是这样的话,你所问的问题最好描述为扁平化而不是序列化。但这只是猜测,我们不应该这么做。你应该把你的问题写得更清楚,这样我们就知道你的目标了。想想我把自己搞糊涂了吧。我尝试增强一些默认xsd,并自动添加一些xdb:SQLType。那么胖,那么好。最终结果应加载到db中,但可变字符串大小不能超过32000个字符。因此,我需要将xsd字符串拆分为几部分。这一部分我也有些工作,但为了让它正常工作,我需要变量中XSD的长度,尝试创建像l_var1这样的文本:='XSD piece1';l_var2:='xsd piece2';insert-into-tab(xsd)值(l|var1 | l|var2)现在正在寻找一种获得xsd的正确字符长度的方法。对于OP的文字问题,这是一个很好的答案(+1),但您真的认为刚开始使用XSLT的人想知道如何用XSLT编写序列化程序吗?对于OP的文字问题,这是一个很好的答案(+1),但您真的认为刚开始使用XSLT的人想知道如何用XSLT编写序列化程序吗?