2012-08-22 63 views
1
<div>  
    <a href="M_TestNamespace_StoredNumber_Swap``1_2_890a5ef1.htm"> 
     Swap 
     <span class="languageSpecificText"> 
      <span class="cs">&lt;</span> 
      <span class="vb">(Of </span><span class="cpp">&lt;</span> 
      <span class="fs">&lt;'</span><span class="nu">(</span> 
     </span> 
     T 
     <span class="languageSpecificText"> 
      <span class="cs">&gt;</span> 
      <span class="vb">)</span> 
      <span class="cpp">&gt;</span> 
      <span class="fs">&gt;</span> 
      <span class="nu">)</span> 
     </span> 
    </a> 
<div> 

信息,我想使用XSLT及以上翻譯成這樣的結果:XSLT檢索<a>

<div> 
    Swap(T) 
<div> 

僅供參考, 「(」 和 「)」 是從<span class="nu"/>的。

回答

0

您可能想要創建一個參數來保存'nu'值。

<xsl:param name="lang" select="'nu'" /> 

然後,你就可以提取像這樣

<xsl:template match="span[@class='languageSpecificText']"> 
    <xsl:value-of select="span[@class=$lang]" /> 
</xsl:template> 

這裏的特定語言文字是滿XSLT

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

    <xsl:param name="lang" select="'nu'" /> 

    <xsl:template match="a"> 
     <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="span[@class='languageSpecificText']"> 
     <xsl:value-of select="span[@class=$lang]" /> 
    </xsl:template> 

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

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

當適用於您的示例XML,以下是輸出

<div>Swap(T)</div> 

的參數更改爲 '動',你會得到以下

<div>Swap(Of T)</div> 
+0

此代碼是非常有幫助,非常感謝去除。 – Leona

0

嘗試像這樣:

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

    <xsl:template match="div"> 
     <xsl:element name="div"> 
      <xsl:value-of select="normalize-space(a/text()[1])"/> 
      <xsl:value-of select="(.//span/span[@class='nu'])[1]/text()"/> 
      <xsl:value-of select="normalize-space(a/text()[2])"/> 
      <xsl:value-of select="(.//span/span[@class='nu'])[2]/text()"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

我假定<div>正確關閉:)。

0

一來產生所需的結果最短的途徑是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="a"> 
    <div><xsl:apply-templates/></div> 
</xsl:template> 
<xsl:template match="a/text() | span[@class='nu']/text()"> 
    <xsl:value-of select="normalize-space()"/> 
</xsl:template> 
<xsl:template match="text()"/> 
</xsl:stylesheet> 

說明

  1. 所有文本節點被忽略:<xsl:template match="text()"/> - 這有效地「刪除」他們回來輸出。在文本a/text() | span[@class='nu']/text()

  2. 不需要的白色空間:通過模板匹配 -

  3. 只有aspan[@class='nu']文本節點孩子區別對待(用於輸出生成文本節點。的a -node兒童使用標準的XPath功能normalize-space()