XSL如何在输出中排除一些孩子?

时间:2017-11-16 16:11:36

标签: xslt

初学者XSL问题..我知道有类似的问题和答案发布,但我无法弄清楚如何将它们应用到我的XSLT ......

我的源XML看起来像(这只是一个更大的XML文件的片段)

<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION><Release NAME="Release" TYPE="Unknown" STATUS="0">
<Transaction>
    <TransactionNumber>4</TransactionNumber>
    <ReleaseNumber>4</ReleaseNumber>
    <PrimaryObjectID>OR:wt.part.WTPart:121581:416986630-1502721046884-982634822-1-0-0-127@ODIGettingStarted.tri.co.uk</PrimaryObjectID>
    <CreatedBy>orgadmin</CreatedBy>
    <CreatedDate>2017-09-27 08:34:31 EDT</CreatedDate>
    <Locale>en_US</Locale>
    <Destination>CRP1</Destination>
</Transaction>
</Release>

我想从输出中排除Locale和Destination节点。 我的完整解决方案将更加复杂,需要我将XML拆分为三个,因此我使用的是迄今为止相关的代码: -

<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "2.0"
    xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">

    <xsl:param name ="outputFileDir" select="'file:///D:/workspace/TPHMOT_xsl/TPHMOT_xsl/xsl_output'"/> 

    <xsl:template match ="/">
        <xsl:result-document href="{$outputFileDir}/ESI_ItemMasters_1.xml" method="xml" indent="yes">
            <COLLECTION>
                <xsl:apply-templates select="COLLECTION/Release"/>
            </COLLECTION>
        </xsl:result-document>
        <xsl:result-document href="{$outputFileDir}/ESI_ConfigurableItem_1.xml" method="xml" indent="yes">
            <COLLECTION>
                <xsl:apply-templates select="COLLECTION/Release"/>
            </COLLECTION>       
        </xsl:result-document>
        <xsl:result-document href="{$outputFileDir}/ESI_GenericBOM_1.xml" method="xml" indent="yes">
            <COLLECTION>
                <xsl:apply-templates select="COLLECTION/Release"/>
            </COLLECTION>       
        </xsl:result-document>      
    </xsl:template>

    <xsl:template match="Release">
        <xsl:copy-of select="self::node()"/>
    </xsl:template>

</xsl:stylesheet>

此输出

<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION>
   <Release NAME="Release" TYPE="Unknown" STATUS="0">
      <Transaction>
         <TransactionNumber>4</TransactionNumber>
         <ReleaseNumber>4</ReleaseNumber>
         <PrimaryObjectID>OR:wt.part.WTPart:121581:416986630-1502721046884-982634822-1-0-0-127@ODIGettingStarted.tri.co.uk</PrimaryObjectID>
         <CreatedBy>orgadmin</CreatedBy>
         <CreatedDate>2017-09-27 08:34:31 EDT</CreatedDate>
         <Locale>en_US</Locale>
         <Destination>CRP1</Destination>
      </Transaction>
   </Release>
</COLLECTION>

如何调整我的XSL以排除Locale和Destination子节点?

非常感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

而不是复制

中的完整元素
<xsl:template match="Release">
    <xsl:copy-of select="self::node()"/>
</xsl:template>

你只需要使用身份转换

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

然后清空模板以防止复制您不想要的元素:

<xsl:template match="Locale | Destination"/>