【发布时间】:2017-11-10 19:58:25
【问题描述】:
我有以下输入结构:
<complexType name="InvoiceType">
<xs:element name="AdressIn" type="AdressType"/>
<xs:element name="AdressOut" type="AdressType" />
<xs:element name="Partner" type="PartnerType" />
<xs:element name="Date" type="DateType"/>
</complexType>
所有引用的类型(AdressType、PartnerType、DateType)也作为复杂类型包含在该文档中(除了许多其他类型)。
我要做的是复制“InvoiceType”中使用的类型 到新文档。 我的问题是,AdressType 在 InvoiceType 中的使用不止一次,因此它在我的新文档中出现的次数不止一次。我怎样才能防止这种情况? 我需要类似“如果已经处理->跳过”之类的东西,但这不是声明性的……也许 xslt 不是实现这一目标的正确方法。
感谢您的帮助!
编辑:
我目前使用的 XSLT 看起来像这样(修改以取悦简单的示例)
<xsl:template match="xs:complexType">
<xsl:for-each select="./xs:element">
<xsl:variable name="elementType"><xsl:value-of select="@type"></xsl:value-of></xsl:variable>
<xsl:copy-of copy-namespaces="no" select="/xs:schema/xs:complexType[@name=$elementType]"/>
</xsl:for-each>
我正在为 InvoceType 应用该模板。基本上我会扔掉它的内容,看看引用了哪些类型,通过他们的名字在文档中查找它们并复制它们。
【问题讨论】:
-
那么你目前使用的是什么?您需要消除重复的地方,是否可以使用
distinct-values、分组或简单地使用/.消除重复取决于您到目前为止输出类型的内容。向我们展示相关的 XSLT
标签: xslt