2016-11-28 24 views
0

我試圖複製包含「x」代碼的部分(所有包含「a」的元素)而不使用xsl:copyxslt複製部分xml而不使用xsl:copy

XML代碼:

<?xml-stylesheet href="mydata.xsl" type="text/xsl" ?> 
    <a> 
     <ab x="x"><b>Test</b><a>z</a></ab> 
     <z x="x"><a>z</a></z> 
    </a> 

期望的結果:

<a> 
    <ab x="x"><a>z</a></ab> 
</a> 

我已經成功地得到使用xsl:copy(見下文)所期望的結果,但不確定如何使它不更改不包含這一點。使用xsl:element也許?任何提示?提前致謝!

使用xsl:copy

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

     <xsl:template match="a | @* |ab"> 
      <xsl:copy> 
       <xsl:apply-templates select="node() | @*"/> 
      </xsl:copy> 
     </xsl:template> 
     <xsl:template match="b|z"/> 
    </xsl:stylesheet> 
+3

如果要複製,它爲什麼重要的是不要使用設計用於複製的工具? –

+0

你的意思是「但不確定如何改變它,所以它不包含。」 – ScanQR

回答

0

試試這個:

<xsl:template match="*"> 
    <xsl:element name="{name()}"> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:attribute name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute>   
</xsl:template> 

<xsl:template match="text()"> 
    <xsl:value-of select="."/> 
</xsl:template> 

<xsl:template match="*[not(contains(name(), 'a'))]"/>  
+0

那麼「*不使用'xsl:copy' *」部分在哪裏? –

+0

我編輯了我的答案。 –

+1

現在還不清楚爲什麼不應該使用''。 *「由於OP表示如此」*通常是一個不好的理由。這個代碼的作用是''做什麼,但是:A)它更復雜,B)任何能夠運行這個代碼的XSLT處理器都支持''。所以... – Tomalak