我有以下需要轉換的 XML:
XML
<CONTENT>
<DESCRIPTION TYPE="NODE"></DESCRIPTION>
<DETAIL TYPE="NODE"></DETAIL>
<DATA TYPE="NODE">
<ITEM DESC="ENTITY" VALUE="Y"></ITEM>
<ITEM DESC="REQUEST" VALUE="Y"></ITEM>
</DATA>
</CONTENT>
標準適用于每個TYPE="NODE"將標簽名稱重命名為NODE和 作為DESC前一個標簽名稱的元素,這也適用于根元素CONTENT,如下所示:
預期的 XML
<NODE DESC="CONTENT">
<NODE DESC="DESCRIPTION"></NODE>
<NODE DESC="DETAIL"></NODE>
<NODE DESC="DATA">
<ITEM DESC="ENTITY" VALUE="Y"></ITEM>
<ITEM DESC="REQUEST" VALUE="Y"></ITEM>
</NODE>
</NODE>
我能夠使用以下轉換重命名根標簽,但不知道如何做其余的,我正在嘗試<xsl:if test="DESC = 'NODE'">但被卡住了:
XSL
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="CONTENT">
<NODE DESC="CONTENT">
<xsl:apply-templates select="@*|node()" />
</NODE>
</xsl:template>
</xsl:stylesheet>
uj5u.com熱心網友回復:
將您的樣式表更改為
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="CONTENT|*[@TYPE='NODE']">
<NODE DESC="{name()}">
<xsl:apply-templates select="@*[not(name()='TYPE')]|node()" />
</NODE>
</xsl:template>
</xsl:stylesheet>
輸出應該符合預期。如果您使用命名空間,您可能應該將name()s 更改為local-name().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489232.html
上一篇:反序列化回傳空值的XML元素
