关注此问题XSLT: Copy child elements of a complex type only once,我在使用该模板时出现问题。
假设我有这样的结构:
<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>
<complexType name="AdressType">
<xs:element name="Person" type="PersonType"/>
<xs:element name="City" type="string" />
<xs:element name="Nr" type="int" />
</complexType>
<complexType name="PartnerType">
<xs:element name="Person" type="PersonType"/>
<xs:element name="Age" type="int"/>
</complexType>
<complexType name="PersonType">
<xs:element name="Name" type="string"/>
</complexType>
这个模板:
<xsl:template match="xs:complexType" mode="copy">
<xsl:apply-templates select="/xs:schema/xs:complexType[@name=current()/xs:sequence/xs:element/@type]"
<xsl:copy-of copy-namespaces="no" select="."></xsl:copy-of>
</xsl:template>
我正在尝试使用此模板复制所有引用的complexType。我现在的问题是,PersonType 由AdressType和PartnerType引用(参见示例)。在我的outputfile中,此类型打印两次。 (简化示例)
我该如何解决这个问题?
Thanx任何帮助!
答案 0 :(得分:0)
你真的想做什么?
(1)显示架构文档中的所有复杂类型? (这很简单)。
(2)显示从某处实际引用的所有全局复杂类型?
你可以做到
select(//xs:complexType[@name = //xs:element/@type])
(在名称空间存在的情况下,它不正确,但您的原始名称不正确)
(3)在第一次遇到某种图遍历时显示复杂类型,但后来没有?
这更难,并涉及一些相当艰难的递归编码。
通常,从源XSD文件访问架构信息很困难;你想要处理“野外任何模式”的越多越难,而不是只按照你编写它们的方式编写的一些模式。可能值得退一步,并询问这项工作的目的是什么。