有没有办法使用 xsl 更改 xml 中元素的名称?

Posted

技术标签:

【中文标题】有没有办法使用 xsl 更改 xml 中元素的名称?【英文标题】:Is there a way to change the name of an element in xml using xsl? 【发布时间】:2021-08-12 09:02:17 【问题描述】:

尝试将 UNICODE_STRING 从我的 xml 更改为仅输出“STRING”而不是表中的 Unicode。我创建了一个表,在其中检索“类型”,但想更改名称并将其简化为 STRING。

有没有办法创建一个变量并将其更改为我想要的?

我的 XSLT 代码是:

[

            <tr bgcolor="lightgreen">
                <th>Name</th>
                <th>Type</th>
                <th>Direction</th>
                <th>ID</th>
            </tr>
            
            <xsl:for-each select = "BATCH_EQUIPMENT_PHASE_CLASS/BATCH_PHASE_DEFINITION/BATCH_PHASE_PARAMETER">
            
                <tr>
                    <td><xsl:value-of select = "NAME"/></td>
                    <td><xsl:value-of select = "TYPE"/></td>
                    <td><xsl:value-of select = "DIRECTION"/></td>
                    <td><xsl:value-of select = "ID"/></td>
                </tr>
            
            </xsl:for-each>
        </table>][1]

而且效果很好。只是在寻找一种方法来从我的 XML 中更改 UNICODE_STRING 的名称。

【问题讨论】:

XSLT - 在提出问题时,您需要提供最小可重现示例:(1) 输入 XML。 (2) 你的逻辑,以及试图实现它的 XSLT。 (3) 期望的输出。 (4) XSLT 处理器及其版本。 除了"UNICODE_STRING" 之外,TYPE 元素还可以包含哪些其他值?您的处理器支持哪个版本的 XSLT? --附言您的标题是 “更改元素的名称” - 但从您发布的代码的 sn-p 中,很明显您正在尝试更改 TYPE 元素的 string-value,而不是它的名称. 【参考方案1】:

感谢迈克尔的建议!我并没有真正完美地解释,但我能够找到解决问题的方法。我使用了以下内容:

<script>function rep()document.body.innerhtml =document.body.innerHTML.replace("UNICODE_STRING", "STRING");document.body.innerHTML =document.body.innerHTML.replace("ENUMERATION_VALUE", "NAMED SET"); </script>

<!-- this is where the script is called, notice its all done after the table is populated -->


<script>rep(); </script>

使用替换功能,我能够更改表格的输出。

【讨论】:

【参考方案2】:

我猜你想替换:

<xsl:value-of select="TYPE"/>

与:

<xsl:choose>
    <xsl:when test="TYPE='UNICODE_STRING'">STRING</xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="TYPE"/>    
    </xsl:otherwise>
</xsl:choose>

如果您的处理器支持 XSLT 2.0 或更高版本,您可以将其缩短为:

<xsl:value-of select="if (TYPE='UNICODE_STRING') then 'STRING' else TYPE"/>

【讨论】:

以上是关于有没有办法使用 xsl 更改 xml 中元素的名称?的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSL 将 json 转换为 XML

XML -> XSL -> HTML 编辑文件,并在没有 asp 的情况下保存 xml 中的更改

在XSL上解析具有相同名称的子元素

XML 元素名称中包含的 XSLT 命名空间 URI

xsl 通配符匹配以排除自身

有没有办法限制根 xml 元素名称应该与 XSD 文件中的相同?