我想發現一個XML數據集的結構,對此我沒有XML模式。作爲此發現的一部分,我想計算數據集元素的最小和最大基數(minOccurs
和maxOccurs
)。我已經嘗試過從XML文檔生成XML模式的各種工具,但它們不生成minOccurs
和maxOccurs
。不過,我懷疑這樣做對於XSLT(2.0+)是可行的。XSLT生成元素基數
更具體,讓我們說我有下面的XML文檔:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a/>
<b>
<c/>
</b>
<b/>
</root>
我想能夠計算在這樣的形式基數:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a minOccurs="1" maxOccurs="1"/>
<b minOccurs="2" maxOccurs="2">
<c minOccurs="0" maxOccurs="1"/>
</b>
</root>
根的兒童會總是具有相同的最大和最小基數,因此可以用如下方式計算部分:
<xsl:template match="/*">
<xsl:element name="{name()}">
<xsl:for-each-group select="*" group-by="name()">
<xsl:sort select="current-grouping-key()"/>
<xsl:element name="{current-grouping-key()}">
<xsl:variable name="cardinality" select="count(current-group())"/>
<xsl:attribute name="minOccurs" select="$cardinality"/>
<xsl:attribute name="maxOccurs" select="$cardinality"/>
</xsl:element>
</xsl:for-each-group>
</xsl:element>
</xsl:template>
但是,我無法圍繞如何繼續孫子女的基數。我懷疑這可以被抽象爲遞歸的xsl:function
。
歡迎任何關於如何進行的建議!
「*根的孩子總是擁有相同的最大和最小基數*」爲什麼? –
由於只有一個根元素,因此其子元素在一個XML文檔中只有一個基數。 –
>我已經嘗試過從XML文檔生成XML模式的各種工具<您嘗試過了「氧氣 - >生成XML嗎?[Docu Oxygen](https://www.oxygenxml.com/doc/versions/18.0/ug-editor /topics/converting-between-schema-languages.html) – uL1