2016-01-22 44 views
0

我需要提取<C></C>提取特定的XML部分給定的XML,通過使用XSLT下面的XML將參數傳遞給XSLT像下面如何使用XSLT

<C> 
<D></D> 
<D></D> 
</C> 

<A> 
<B/> 
<C> 
<D></D> 
<D></D> 
</C> 
<E><D></D></E> 
</A> 

如果我能夠將元素的值設置爲「C」,我如何能夠執行上述操作。我目前的xslt模板如下所示。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <!-- Identity transform --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:param name="element" /> 
    <xsl:template match="/"> 
     <$element> 
     <xsl:processing-instruction name="xml-multiple"> 
      <xsl:value-of select="local-name(//D)" /> 
     </xsl:processing-instruction> 
     <xsl:copy-of select="/A/$element/D" /> 
     </$element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

thx很多Potame它爲我工作。你能告訴我這是可能的嗎? $ element =「E」即可生效標籤 – Uditha

回答

2

這是不可能進入的元素名稱作爲參數,並直接在XPath使用它的select秒。

然而,你可以重構你的樣式表是這樣的:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <!-- Identity transform --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:param name="element" select="'C'"/> 
    <xsl:template match="/"> 
     <xsl:element name="{$element}"> 

     <xsl:processing-instruction name="xml-multiple"> 
      <xsl:value-of select="local-name(//D)" /> 
     </xsl:processing-instruction> 

     <xsl:copy-of select="/A/*[name() = $element]/D" /> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

得到的結果是:

<?xml version="1.0" encoding="UTF-8"?> 
<C> 
    <?xml-multiple D?> 
    <D/><D/> 
</C> 

對應於所需的輸出。