XSLT:防止相同元素多次出现

XSLT:防止相同元素多次出现,xslt,Xslt,我正在尝试使用XSLT处理多个文件。一个文件中的某些内容需要使用另一个文件的内容进行修改 例如,在一个文件中查找元素名“type”,并将其内容替换为名为“targetSiteCode”的元素的内容,依此类推 这是第一个文件(我只展示了尽可能少的工作示例): 为什么需要第二个文件?你似乎没有从中得到任何价值,只有结构。为什么不将其纳入样式表中呢?问题是,有些节点需要从File2复制整个节点,该节点可能“按原样”有多个子节点,但随后只修改整个部分中的一个元素。所以,我不知道。我知道它看起来不漂亮,但

我正在尝试使用XSLT处理多个文件。一个文件中的某些内容需要使用另一个文件的内容进行修改

例如,在一个文件中查找元素名“type”,并将其内容替换为名为“targetSiteCode”的元素的内容,依此类推

这是第一个文件(我只展示了尽可能少的工作示例):


为什么需要第二个文件?你似乎没有从中得到任何价值,只有结构。为什么不将其纳入样式表中呢?问题是,有些节点需要从File2复制整个节点,该节点可能“按原样”有多个子节点,但随后只修改整个部分中的一个元素。所以,我不知道。我知道它看起来不漂亮,但我不知道怎样才能做得更好。理论上,我可以将文件的全部内容(有很多)合并到样式表中,并在必要时进行修改,但这会使样式表太大,并且(依我看)看起来更不美观。此外,将样式表与内容分开也许是好的——需要使用从输入XML中获取的内容填充的结构就是一个模板。依我看,最好将其作为XSLT模板编写并使用。如果愿意,您可以从其他样式表中包含或导入模板。为什么需要第二个文件?你似乎没有从中得到任何价值,只有结构。为什么不将其纳入样式表中呢?问题是,有些节点需要从File2复制整个节点,该节点可能“按原样”有多个子节点,但随后只修改整个部分中的一个元素。所以,我不知道。我知道它看起来不漂亮,但我不知道怎样才能做得更好。理论上,我可以将文件的全部内容(有很多)合并到样式表中,并在必要时进行修改,但这会使样式表太大,并且(依我看)看起来更不美观。此外,将样式表与内容分开也许是好的——需要使用从输入XML中获取的内容填充的结构就是一个模板。依我看,最好将其作为XSLT模板编写并使用。如果愿意,您可以从其他样式表中包括或导入模板。
<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <component>

        <entryRelationship>
            <effectiveTime value="first time"/>                                 
            <targetSiteCode code="site" codeSystem="firstcod_esys"  codeSystemName="firstcode_name" displayName="firstcode_disp"/>
        </entryRelationship>

        <entryRelationship>
            <effectiveTime value="second time"/>
            <targetSiteCode code="LACF" 
        codeSystem="second_code_sys" codeSystemName="second_code_name" displayName="second_code_disp"/>
        </entryRelationship>                                                                

    </component>                        
</Document>
<?xml version="1.0" encoding="UTF-8"?>
<Sample>
    <receivedTime value="2016-04-04T07:03:00Z"/>
    <collect>
        <type>      
            <coding>
                <system value="somesystem"/>
                <code value="somecode"/>
                <display value="somedisplay"/>
            </coding>
        </type> 
    </collect>
</Sample>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:strip-space elements="*" />

    <xsl:variable name="input" select="/" />

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

    <xsl:template match="/">
        <Bundle>            
            <entry>
                <fullUrl value ="somevalue"/>           
                <resource>                          
                        <xsl:apply-templates select= "Document/component/entryRelationship"/>
                </resource>
            </entry>
        </Bundle>
    </xsl:template>

    <xsl:template match = "Document/component/entryRelationship">
            <xsl:apply-templates select="document('File2.xml')/*"/>             
    </xsl:template>

    <xsl:template match = "Sample/receivedTime">
        <receivedTime>
            <xsl:apply-templates select = "$input/Document/component/entryRelationship/effectiveTime"/>
        </receivedTime>
    </xsl:template>

    <xsl:template name="effectiveTime">
        <time>
            <xsl:attribute name="value">
                <xsl:value-of select="@displayName" />
            </xsl:attribute>
        </time>
    </xsl:template>     

    <xsl:template match = "Sample/collect/type">
        <type>
            <xsl:apply-templates select = "$input/Document/component/entryRelationship/targetSiteCode"/>
        </type>
    </xsl:template>     

    <xsl:template match="targetSiteCode">   
        <coding>
            <system >
                <xsl:attribute name="value">
                    <xsl:value-of select="@codeSystem" />
                </xsl:attribute>
            </system>
            <code>
                <xsl:attribute name="value">
                    <xsl:value-of select="@code"/>
                </xsl:attribute>
            </code>
            <display>
                <xsl:attribute name="value">
                    <xsl:value-of select="@displayName" />
                </xsl:attribute>
            </display>
        </coding>
    </xsl:template>         
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<Bundle>
   <entry>
      <fullUrl value="somevalue"/>
      <resource>
         <Sample>
            <receivedTime>
               <effectiveTime value="first time"/>
               <effectiveTime value="second time"/>
            </receivedTime>
            <collect>
               <type>
                  <coding>
                     <system value="firstcod_esys"/>
                     <code value="site"/>
                     <display value="firstcode_disp"/>
                  </coding>
                  <coding>
                     <system value="second_code_sys"/>
                     <code value="LACF"/>
                     <display value="second_code_disp"/>
                  </coding>
               </type>
            </collect>
         </Sample>
         <Sample>
            <receivedTime>
               <effectiveTime value="first time"/>
               <effectiveTime value="second time"/>
            </receivedTime>
            <collect>
               <type>
                  <coding>
                     <system value="firstcod_esys"/>
                     <code value="site"/>
                     <display value="firstcode_disp"/>
                  </coding>
                  <coding>
                     <system value="second_code_sys"/>
                     <code value="LACF"/>
                     <display value="second_code_disp"/>
                  </coding>
               </type>
            </collect>
         </Sample>
      </resource>
   </entry>
</Bundle>
<?xml version="1.0" encoding="UTF-8"?>
<Bundle>
   <entry>
      <fullUrl value="somevalue"/>
      <resource>
         <Sample>
            <receivedTime>
               <effectiveTime value="first time"/>            
            </receivedTime>
            <collect>
               <type>
                  <coding>
                     <system value="firstcod_esys"/>
                     <code value="site"/>
                     <display value="firstcode_disp"/>
                  </coding>                  
               </type>
            </collect>
         </Sample>
         <Sample>
            <receivedTime>               
               <effectiveTime value="second time"/>
            </receivedTime>
            <collect>
               <type>                  
                  <coding>
                     <system value="second_code_sys"/>
                     <code value="LACF"/>
                     <display value="second_code_disp"/>
                  </coding>
               </type>
            </collect>
         </Sample>
      </resource>
   </entry>
</Bundle>