2014-11-22 43 views
0

我有一個看起來像這樣的一個XML文件,移動在XML文件中的元素與XSLT

<XML> 
    <article article-type="research"> 
    <article-meta> 
    <abstract> 
     <p> lorisum......</p> 
    </abstract> 
    <abstract abstract-type="summary"> 
     <p>lorisum summary</p> 
    </abstract> 
    </article-meta> 

    <body> 
    <sec> 
    <p> 
     ...... 
    </p> 
    </sec> 
    <sec sec-type="clinical"> 
    <p> clinical test</p> 
    </sec> 
    </body> 
    </article> 
    <XML> 

的問題是如何移動的臨牀秒到非類型化的抽象與XSLT?

回答

1

您可以將臨牀秒這樣的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:template match="/"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="abstract[not(@abstract-type)]"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <xsl:copy-of select="//sec[@sec-type='clinical']"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="sec[@sec-type='clinical']"/> 
</xsl:stylesheet> 

輸出:

<XML> 
    <article article-type="research"> 
    <article-meta> 
     <abstract> 
      <p> lorisum......</p> 
      <sec sec-type="clinical"> 
       <p> clinical test</p> 
      </sec> 
     </abstract> 
     <abstract abstract-type="summary"> 
      <p>lorisum summary</p> 
     </abstract> 
    </article-meta> 
    <body> 
     <sec> 
      <p> 
       ...... 
      </p> 
     </sec> 
    </body> 
    </article> 
</XML> 

模板只是複製一切從原來的輸入XML。模板匹配sec[@sec-type='clinical']爲空,因此此部分將從此副本中刪除。匹配沒有抽象類型屬性摘要的模板 - abstract[not(@abstract-type)] - 複製摘要並添加sec[@sec-type='clinical']的副本。

+0

完美!謝謝!! – Al2014 2014-11-23 21:06:06