0
XSLT新手在這裏。我有一個可以看起來像任何東西的XML塊,但是基於它的元素名稱,我需要能夠改變它的內容。問題是XML可能是前綴或不是。根據元素名稱更改元素內容XSLT
前綴爲XML可能看起來像:
<POIS xmlns:tns="http://example.com/integration/docs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:POI>
<tns:CTL>
<tns:transaction_date/>
<tns:record_qualifier/>
<tns:start_date>2012-10-12 </tns:start_date>
<tns:test_indicator>P</tns:test_indicator>
</tns:CTL>
</tns:POI>
</tns:POIS>
或者沒有前綴:
<POIS xmlns="http://example.com/integration/docs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<POI>
<CTL>
<transaction_date/>
<record_qualifier/>
<start_date>2012-10-12</start_date>
<test_indicator>P</test_indicator>
</CTL>
</POI>
</POIS>
我想改變的時候有一個值與_DATE表示結束元素的內容。
因此,一個可能的結果應該是:
<POIS xmlns:tns="http://example.com/integration/docs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:POI>
<tns:CTL>
<tns:transaction_date/>
<tns:record_qualifier/>
<tns:start_date>20121012 </tns:start_date>
<tns:test_indicator>P</tns:test_indicator>
</tns:CTL>
</tns:POI>
</tns:POIS>
這是我到目前爲止有:
的問題是,它抱怨與TNS:前綴或將在命名空間改變的元素非前綴XML元素的空白名稱空間。
任何解決方案?這是一個實用程序轉換,所以我想盡可能保持通用。
<xsl:stylesheet version="2.0"
xmlns:xp20="http://www.oracle.com/XSL/Transform/
java/oracle.tip.pc.services.functions.Xpath20"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()[ends-with(name(), '_date')]">
<xsl:choose>
<xsl:when test="(text())" >
<xsl:element name="{name()}" >
<xsl:value-of select ="xp20:format-dateTime(text(),'[Y0001][M01][D01]')" />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
您的XML格式不正確:''應以' '結尾,缺少''結束標記,在''標記上不一致的前綴。請修復您的XML。 –
2012-04-19 17:00:16
嘗試將''改成''...有幫助嗎? –
2012-04-19 17:23:53
不幸的是,它仍然失敗,因爲它將一個空白的命名空間' 20120430 ''。 –
rafter
2012-04-19 19:22:21