gpt4 book ai didi

xslt - 匹配从 XSLT 中的类型继承的节点

转载 作者:行者123 更新时间:2023-12-04 22:51:41 24 4
gpt4 key购买 nike

我们有一个 XSD,它定义了以下内容:

<xsd:element name="Product" type="cm:Product" abstract="true" />
<xsd:complexType name="Product" abstract="true">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="0" />
<!-- Other common elements -->
</xsd:sequence>
</xsd:complexType>

<xsd:element name="Subscription" type="cm:Subscription" />
<xsd:complexType name="Subscription">
<xsd:complexContent>
<xsd:extension base="cm:Product">
<xsd:sequence>
<!-- Subscription specific elements -->
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

我需要创建一个 XSLT,它采用产品名称和一些其他内容,并将其转换为 Web 服务请求。问题是我真的不知道顶部元素是否真的说 cm:Productcm:Subscription 或完全不同的东西(但它扩展了 cm:Product)。

有没有一种方法可以让我以某种方式编写一个匹配 cm:Product 元素和所有扩展 cm:Product 的元素的模板?


简单示例输入

<Subscription xmlns="http://schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>Basis</name>
</Subscription>

到目前为止我有什么

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cm="http://schema"
exclude-result-prefixes="cm">

<xsl:param name="processID" />

<xsl:template match="/">
<xsl:element name="RequestElement">
<xsl:element name="processId">
<xsl:value-of select="$processID" />
</xsl:element>
<xsl:apply-templates />
</xsl:element>
</xsl:template>

<xsl:template match="cm:Product/cm:name">
<xsl:element name="name">
<xsl:value-of select="." />
</xsl:element>
</xsl:template>

<xsl:template match="text()" />

</xsl:stylesheet>

如果我将 cm:Product 更改为 cm:Subscription,这会起作用,这是在我的特定输入 xml 中,但问题是我不知道它其实就是一个cm:Subscription。我“知道”的是它是一个扩展 cm:Product

的元素

最佳答案

<xsl:template match="element(*, cm:Product)/cm:name">

应该这样做,但是你需要添加一个合适的顶层

<xsl:import-schema namespace="https://schema" schema-location="....." />

当然,它要求您的处理器具有模式感知能力。

关于xslt - 匹配从 XSLT 中的类型继承的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com