有没有办法使用 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 中元素的名称?的主要内容,如果未能解决你的问题,请参考以下文章