Question

Ceci est ma première fois en utilisant XSLT. Je suis en train de créer un fichier qui convertit un fichier de données XML exporté à partir d'un programme que j'utilise un rapport HTML.

Un de la valeur de l'élément est chemin d'accès à un fichier d'image, mais le chemin généré est un chemin absolu tel que

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg

mais je veux un chemin par rapport à tout le nom du fichier.

Est-il possible dans le fichier XLST pour analyser le nom de fichier?

Était-ce utile?

La solution

XPath contient la fonction substring-after qui renvoie la chaîne suivante le premier apparition d'une autre chaîne. Cela ne suffit pas en soi, mais un modèle tel que le suivant pourrait le faire:

<xsl:template name="filename-only">
    <xsl:param name="path" />
    <xsl:choose>
        <xsl:when test="contains($path, '\')">
            <xsl:call-template name="filename-only">
                <xsl:with-param name="path" select="substring-after($path, '\')" />
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$path" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

L'ensemble des fonctions de chaîne disponible est pas très vaste, mais je l'ai trouvé qu'il est assez bon pour la plupart des applications que vous aurez besoin en XSLT.

Autres conseils

est un peu au-delà de la portée de la question, mais Michael Kay a un excellent papier sur l'utilisation de XSLT 2 pour analyser le texte pur en XML.

Oui, voir un analyseur LR (1) générale mis en oeuvre dans XSLT 2.0. (juste à 245 lignes).

Je l'ai mis en œuvre avec elle un analyseur syntaxique pour JSON et un analyseur syntaxique pour XPath 2.0 -. entièrement en XSLT

XSLT avec l'aide de XPath 2.0 et de ses différents aide il faire face à ce genre de choses.

Exemple:
En supposant que le chemin [vers le fichier jpg] mentionné en question provient d'un extrait de xml similaire à

...
<For_HTML>
   <Image1>
      <Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path>
      <Description>Photo of the parking lot</Description>
      <Width>123</Width>
      ...
    </Image1>
</For_HTML>

extrait XSLT ressemblerait à quelque chose comme

<xsl:template match='//For_HTML/Image1'> 
     <img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}'
          alt='{./Description}'
          width=' ....  you got the idea'
     /> 
</xsl:template>

Note: n'a pas eu le temps de tester; mais qui semble à peu près juste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top