2013-12-10 73 views
-4

將文本值添加到自閉空標記中請參閱下面的XML。在XML中,名稱元素是一個自我關閉的空標記。我需要爲此名稱元素標記添加文本值。這個XML代碼塊可能會在整個XML中重複任意次數。我需要使用XSLT

<participant typeCode="LOC"> 
    <participantRole classCode="SDLOC"> 
    <id extension="00000000-0000-0000-0000-000000000000" root="1.0"/> 
    <addr nullFlavor="UNK"/> 
    <playingEntity> 
     <name/> 
    </playingEntity> 
    </participantRole> 
</participant> 

預期輸出:需要爲自關閉空名稱元素標記添加UNK文本值。

<participant typeCode="LOC"> 
    <participantRole classCode="SDLOC"> 
    <id extension="00000000-0000-0000-0000-000000000000" root="1.0"/> 
    <addr nullFlavor="UNK"/> 
    <playingEntity> 
     <name>UNK</name> 
    </playingEntity> 
    </participantRole> 
</participant> 

我需要一個XSLT腳本來達到這個要求。

感謝,

回答

1

你需要一個身份轉換模板:

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

加上一個模板名稱標籤:

<xsl:template match="name[not(node())]"> 
    <name>UNK</name> 
</xsl:template> 

包裝這個範圍內的樣式表標籤,並添加XML標題:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 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="name[not(node())]"> 
    <name>UNK</name> 
    </xsl:template> 
</xsl:stylesheet> 
+0

將簡單地將所有名稱元素值更改爲UNK。只有當name元素是「self closing empty tag」時,我纔想爲name元素添加一個UNK值。正如在下面的情況....這只是XML的一部分,其中名稱元素是空的,否則在其他地方它保存一個值。 – user3088598

+0

該會將所有名稱元素值更改爲UNK。只有當name元素是「self closing empty tag」時,我纔想爲name元素添加一個UNK值。正如在下面的情況....這只是XML的一部分,其中名稱元素是空的,否則在其他地方它保存一個值。 <參與者TYPECODE = 「LOC」> <地址nullFlavor = 「UNK」 /> user3088598

+0

OK。在這種情況下,您需要向選擇表達式添加一個謂詞:name [not(node())]。我會更新我的解決方案。 – user152468