2012-04-19 156 views
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> 
+0

您的XML格式不正確:''應以''結尾,缺少''結束標記,在''標記上不一致的前綴。請修復您的XML。 – 2012-04-19 17:00:16

+0

嘗試將''改成''...有幫助嗎? – 2012-04-19 17:23:53

+0

不幸的是,它仍然失敗,因爲它將一個空白的命名空間' 20120430''。 – rafter 2012-04-19 19:22:21

回答

1

嘗試改變<xsl:element name="{name()}"><xsl:element name="{local-name()}">