Comment vérifier si le nœud de l'élément contient une valeur spécifique dans xsl
J'ai un document XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<fruits>
<fruit id="1">
<title>I like pineapples</title>
<description> a tropical plant with edible multiple fruit consisting of coalesced berries</description>
</fruit>
<fruit id="2">
<title>I like watermelons</title>
<description>has a smooth exterior rind (green, yellow and sometimes white) and a juicy, sweet interior flesh</description>
</fruit>
</fruits>
</document>
Comment puis-je vérifier si le title
élément contient 'ananas', de sorte que je ne peux afficher description
pour fruit
?
Ici est la transformation XSLT j'ai:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" doctype-public="-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
doctype-system="http://www.wapforum.org/DTD/xhtml-mobile10.dtd"/>
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">Fruits</xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:if test="/document/fruits/fruit/title[contains(text(),'pineapple')]">
<xsl:value-of select="description"/>
</xsl:if>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Avez-vous songé à l'aide d'un prédicat comme [contient(text(),'ananas')] pour le titre des éléments?
J'ai essayé <xsl:if test="/document/fruis/fruits/titre[contient(text(),'ananas')]">
Dans votre expression, il convient de fruits au lieu de fruis. Et votre xml n'est pas bien formé, le <fruits> et <fruits> éléments ne sont pas correctement fermés. Si vous les corriger, je pense que cela fonctionnera.
non, j'ai corrigé les fautes dans le xml et <xsl:si> et testé encore, mais ça ne fonctionne pas.
J'ai testé l'expression XPath à l'aide de l'outil et il fonctionne très bien. Je pense qu'il y a peut-être un problème dans le code XSLT. Pourriez-vous montrer tous les éléments XSLT?
J'ai essayé <xsl:if test="/document/fruis/fruits/titre[contient(text(),'ananas')]">
Dans votre expression, il convient de fruits au lieu de fruis. Et votre xml n'est pas bien formé, le <fruits> et <fruits> éléments ne sont pas correctement fermés. Si vous les corriger, je pense que cela fonctionnera.
non, j'ai corrigé les fautes dans le xml et <xsl:si> et testé encore, mais ça ne fonctionne pas.
J'ai testé l'expression XPath à l'aide de l'outil et il fonctionne très bien. Je pense qu'il y a peut-être un problème dans le code XSLT. Pourriez-vous montrer tous les éléments XSLT?
OriginalL'auteur Sujal | 2013-04-07
Vous devez vous connecter pour publier un commentaire.
Voici un peu plus de pousser l'approche axée sur la qui accomplit ce que vous voulez.
Lorsque cette XSLT:
...est appliqué à la condition XML:
...le résultat souhaité est obtenu:
Ce processeur XSLT utilisez-vous? J'ai utilisé plusieurs (Expat, Saxon, libxslt, etc.) et n'obtenez pas les résultats que vous voyez.
Ok Désolé! votre solution a fonctionné, la solution par @Dimitre Novatchev causé ce résultat.
Oui, il y avait une seule ligne manquante dans ma réponse, qui est maintenant en place.
OriginalL'auteur ABach
Un simple et presque entièrement "pousser style" solution:
Lorsque cette transformation est appliquée sur le document XML:
le voulait, résultat correct est produit:
Désolé, il y avait une petite copier+coller question. Maintenant corrigé.
OriginalL'auteur Dimitre Novatchev