我正在转换一个XML文件,该文件需要根据XSD中定义的有效枚举选项生成一些元素。
假设我有一个XSD,它声明了一个类型和一个元素,如下所示:
<xs:simpleType name="optionType" nillable="true">
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
<xs:enumeration value="USERCHOICE">
</xs:enumeration>
<xs:enumeration value="DEFAULT">
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
...
<xs:element name="chosenOption" type='optionType'/>
...
<xs:element name="availableOption" type='optionType'/>
Run Code Online (Sandbox Code Playgroud)
输入将仅包含选定的选项,因此您可以想象它看起来像这样:
<options>
<chosenOption>USERCHOICE</chosenOption>
</options>
Run Code Online (Sandbox Code Playgroud)
我需要有一个看起来像这样的输出:
<options>
<chosenOption>USERCHOICE</chosenOption> <!-- This comes from incoming XML -->
<!-- This must be a list of ALL possible values for this element, as defined in XSD -->
<availableOptions>
<availableOption>USERCHOICE</availableOption>
<availableOption>DEFAULT</availableOption>
</availableOptions>
</options>
Run Code Online (Sandbox Code Playgroud)
有没有办法让XSL 从XSD 提取枚举值USERCHOICE并DEFAULT在输出中产生它们?
这将在WebSphere 6上运行,并将由XSLT 1.0引擎使用。:(
(模式文件不会经常更改,但是会不时更改,而我只需要更新模式文件,而不必更新模式文件和XSLT)
这是一个原型,假定您的输入XML和XSD与上面的示例一样简单。根据它们可能变化的方式进行调整。如果您需要有关调整的帮助,请告诉我。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:variable name="xsd" select="document('mySchema.xsd')"/>
<xsl:template match="/options">
<xsl:copy>
<xsl:for-each select="*">
<xsl:variable name="eltName" select="local-name()"/>
<xsl:copy-of select="." />
<availableOptions>
<xsl:variable name="optionType"
select="$xsd//xs:element[@name = $eltName]/@type"/>
<xsl:apply-templates
select="$xsd//xs:simpleType[@name = $optionType]/
xs:restriction/xs:enumeration"/>
</availableOptions>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="xs:enumeration">
<availableOption><xsl:value-of select="@value" /></availableOption>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3672 次 |
| 最近记录: |