XSLT:使用XSLT脚本需要将XML转换为其给定的OUTPUT xml

时间:2013-12-12 19:46:28

标签: xml xslt

原始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>

所以基本上我们只为自动关闭playEntity父类名元素的空名元素添加UNK值,并且我们不会打扰/更改自关闭空名NoplayingEntity父类代码。 XML也有一些名称空间声明,因此我无法获得此输出。

1 个答案:

答案 0 :(得分: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>