我正在嘗試為空元素添加 xsi:nil="true" 并將默認命名空間添加到所有元素。
轉換成功地反映了這些命名空間,但孩子的孩子現在包含一個空白的 xmlns 屬性。我怎樣才能防止這種情況xmlns=""?
XSLT 代碼段:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(text())]">
<xsl:copy>
<xsl:attribute name="xsi:nil">true</xsl:attribute>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://xmlns.oracle.com/pcbpel/adapter/db/ORESB_STAAConfig_DBAdapter">
<xsl:namespace name="xsi" select="'http://www.w3.org/2001/XMLSchema-instance'"/>
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XML:
<ORESB_STAAConfig_DBAdapterOutput>
<ACODE>A52557</ACODE>
<DESC_TO_CP>WLR ISDN2E System</DESC_TO_CP>
<TYPE>EX</TYPE>
<INSTALLATION_TYPE>Standard</INSTALLATION_TYPE>
<PAYPHONE_TYPE/>
<TERMINATION_TYPE>NTE</TERMINATION_TYPE>
</ORESB_STAAConfig_DBAdapterOutput>
<ORESB_STAAConfig_DBAdapterOutput>
<ACODE>A52558</ACODE>
<DESC_TO_CP>WLR ISDN2E System</DESC_TO_CP>
<TYPE>EX</TYPE>
<INSTALLATION_TYPE>Standard</INSTALLATION_TYPE>
<PAYPHONE_TYPE/>
<TERMINATION_TYPE>NTE</TERMINATION_TYPE>
</ORESB_STAAConfig_DBAdapterOutput>
</ORESB_STAAConfig_DBAdapterOutputCollection>
結果 XML:
<ORESB_STAAConfig_DBAdapterOutputCollection xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/ORESB_STAAConfig_DBAdapter"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ORESB_STAAConfig_DBAdapterOutput>
<ACODE>A52557</ACODE>
<DESC_TO_CP>WLR ISDN2E System</DESC_TO_CP>
<TYPE>EX</TYPE>
<INSTALLATION_TYPE>Standard</INSTALLATION_TYPE>
<PAYPHONE_TYPE xmlns="" xsi:nil="true"/>
<TERMINATION_TYPE>NTE</TERMINATION_TYPE>
</ORESB_STAAConfig_DBAdapterOutput>
<ORESB_STAAConfig_DBAdapterOutput>
<ACODE>A52558</ACODE>
<DESC_TO_CP>WLR ISDN2E System</DESC_TO_CP>
<TYPE>EX</TYPE>
<INSTALLATION_TYPE>Standard</INSTALLATION_TYPE>
<PAYPHONE_TYPE xmlns="" xsi:nil="true"/>
<TERMINATION_TYPE>NTE</TERMINATION_TYPE>
</ORESB_STAAConfig_DBAdapterOutput>
</ORESB_STAAConfig_DBAdapterOutputCollection>
uj5u.com熱心網友回復:
如果要更改所有元素的命名空間,則不能使用xsl:copyin
<xsl:template match="*[not(text())]">
<xsl:copy>
但需要
<xsl:template match="*[not(text())]">
<xsl:element name="{local-name()}" namespace="http://xmlns.oracle.com/pcbpel/adapter/db/ORESB_STAAConfig_DBAdapter">
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365392.html
上一篇:如何從名稱相同的XML中獲取值
下一篇:XSLT-添加新元素和值
