2013-12-12 97 views
-1

原始XML:XSLT:使用XSLT腳本需要將XML轉換到其給定輸出XML

<?xml version="1.0" encoding="UTF-8"?> 
<Document xmlns:voc="urn:hl7-org:v3/voc" xmlns:sdtc="urn:hl7-org:sdtc" 
    xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <participant typeCode="LOC"> 
     <participantRole classCode="SDLOC"> 
      <id extension="00000000-0000-0000-0000-000000000000" root="1.0"/> 
      <addr nullFlavor="UNK"/> 
      <playingEntity> 
       <name/> 
      </playingEntity> 
     </participantRole> 
    </participant> 
    <Noparticipant typeCode="LOC"> 
     <NoparticipantRole classCode="SDLOC"> 
      <id extension="00000000-0000-0000-0000-000000000000" root="1.0"/> 
      <addr nullFlavor="UNK"/> 
      <NoplayingEntity> 
       <name/> 
      </NoplayingEntity> 
     </NoparticipantRole> 
    </Noparticipant> 
</Document> 

輸出XML應該是:

<?xml version="1.0" encoding="UTF-8"?> 
<Document xmlns:voc="urn:hl7-org:v3/voc" xmlns:sdtc="urn:hl7-org:sdtc" 
    xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <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> 
    <Noparticipant typeCode="LOC"> 
     <NoparticipantRole classCode="SDLOC"> 
      <id extension="00000000-0000-0000-0000-000000000000" root="1.0"/> 
      <addr nullFlavor="UNK"/> 
      <NoplayingEntity> 
       <name/> 
      </NoplayingEntity> 
     </NoparticipantRole> 
    </Noparticipant> 
</Document> 

所以基本上我們正在增加UNK值自閉僅用於playingEntity父類名稱元素的空名稱元素,並且我們不打擾/更改自封閉空名稱NoplayingEntity父類別代碼。 XML也有一些名稱空間聲明,因此我無法獲得此輸出。

+0

請注意,這是一個巨大的XML文件的只是一小部分。 – user3088598

+0

可能的重複[我需要添加文本值自我關閉空標記,使用XSLT](http://stackoverflow.com/questions/20505304/i-need-to-add-a-text-value-to -an-self-closing-empty-tag-using-xslt) –

+0

是的,這個問題是由我發佈的..但這裏的要求有點不同,我很難找出答案。敬請期待 – user3088598

回答

0

嘗試......

<xsl:stylesheet version="1.0" xmlns:hl7="urn:hl7-org:v3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

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

</xsl:stylesheet>