2017-10-17 192 views
0

輸入xml,如下所示。刪除xslt中只指定父元素而非子元素

<part type="frontmatter"> 
<section level="1"><title>THIEME Atlas of Anatomy</title> 
........ 
</section> 
<section level="1"> 
<title></title><para><emph type="bold">To access additional material 
...... 
</section> 
</part> 
<part type="content"> 
<section level="1"> 
<title id="p001">Structure and Development of Organ Systems</title> 
... 
<section level="2"> 
<title>Suggested Readings</title> 
....... 
</section> 
</section> 
</part> 

輸出應該是

<part type="frontmatter"> 
<section level="1"><title>THIEME Atlas of Anatomy</title> 
........ 
</section> 
<section level="1"> 
<title></title><para><emph type="bold">To access additional material 
...... 
</section> 
</part> 
<part type="content"> 
<title id="p001">Structure and Development of Organ Systems</title> 
... 
<section level="2"> 
<title>Suggested Readings</title> 
........ 
</section> 
</part> 

我的XSLT是:

<xsl:template match="section[position()=1]"><!-\-//-\-> 
    <xsl:if test="preceding-sibling::part[@type='content'][not(title)]"> 
     <part type="content"> 
     <xsl:apply-templates select="node() | @*"/> 
     </part> 
    </xsl:if> 
</xsl:template> 

我想刪除<section level="1">元件,其<part type="content">下出現,其中 「冠軍」 元素不應該在這兩者之間出現元素。如果「標題」出現在部分元素下,則不應做任何更改。

回答

0

如果你想刪除section元素,part元素,在沒有前title下,然後在模板匹配應該是這樣的

<xsl:template match="part[@type='content']/section[@level='1'][not(preceding-sibling::title)]"> 

試試這個XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" /> 

    <xsl:template match="part[@type='content']/section[@level='1'][not(preceding-sibling::title)]"> 
     <xsl:apply-templates /> 
    </xsl:template> 

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

注,在這個特定的例子中,你可能可以簡化到這個

<xsl:template match="part[@type='content']/section[1]"> 

因此,只要刪除section元素,如果它是part的第一個子元素。如果您的title之前的元素可能位於section之前,那麼這將不起作用。

+0

thanku for you response Tim C.下面的代碼工作正常。 Sumathi