2012-08-22 1 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> 

Je voudrais en utilisant XSLT et traduire ci-dessus dans le résultat comme celui-ci:xslt récupérer des informations de <a>

<div> 
    Swap(T) 
<div> 

Pour votre information, le "(" et ")" sont de <span class="nu"/>.

Répondre

0

Vous pouvez créer un paramètre pour conserver la valeur 'nu'.

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

Ensuite, vous seriez en mesure d'extraire le texte spécifique de langue comme si

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

Voici le XSLT plein

<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> 

Appliqué à votre exemple XML, ce qui suit est sortie

<div>Swap(T)</div> 

Modifiez le paramètre 'vb' et vous obtenez les éléments suivants

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

Ce code est très utile, Merci beaucoup. – Leona

0

Essaye comme ceci:

<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> 

J'ai supposé que le <div> est correctement :) fermé.

0

L'une des voies les plus courtes pour générer le résultat recherché est:

<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> 

Explication:

  1. Tous les nœuds de texte sont ignorés par: <xsl:template match="text()"/> - cela les "supprime" effectivement m la sortie.

  2. Seuls les enfants texte nœud de a et span[@class='nu'] sont traités différemment (utilisé pour générer du texte-noeuds dans la sortie - par la mise en correspondance de modèle: a/text() | span[@class='nu']/text()

  3. L'espace blanc non désiré dans le texte. les enfants de -node a est supprimé en utilisant la fonction standard XPath normalize-space()

Questions connexes