XSLT Comment vérifier si le Nœud XML existe?
J'ai des fichier XML:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<Data>
<Records>
<Record>
<AddInfo>
<Info>
</Info>
</AddInfo>
</Record>
</Records>
</Data>
et fichier XSL:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Dane">
<html>
<link rel="stylesheet" type="text/css" href="report.css"></link>
<body>
<h2>Table1</h2>
<table border="1" cellspacing="0">
<tr>
<th>XXX</th>
</tr>
<xsl:for-each select="Records/Record">
<tr>
<td>
<xsl:value-of select="XXX"/>
</td>
</tr>
</xsl:for-each>
</table>
<h2>SecondTable</h2>
<table border="1" cellspacing="0">
<tr>
<th>YYY</th>
<th>ZZZ</th>
</tr>
<xsl:for-each select="Records/Record/AddInfo/Info">
<tr>
<td>
<xsl:value-of select="YYY"/>
</td>
<td>
<xsl:value-of select="ZZZ"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Et je veux le faire comme ça: si le nœud existe, affichage de la table "Info" nœuds, et si non, afficher le TEXTE.
J'ai essayé
<xsl:if test="following-sibling::AddInfo">
</xsl:if>
et
<xsl:if test="AddInfo">
</xsl:if>
Mais ça ne fonctionne pas.
Je le veux comme ceci:
Table1
---------------------
| | | |
(condition: si à l'intérieur de XML sera nœud, je veux afficher la deuxième table, sous la table Table1)
SecondTable
-------------
| | |
Comment je peux faire cela?
Il n'est pas clair ce que vous demandez. Une chose importante, vous n'avez pas posté votre sortie attendue. Et de, mettre tous les scénarios dans votre XML d'entrée que vous souhaitez traiter.
Votre question n'est pas claire. Exactement où vous voulez insérer ce test? Vous n'avez qu'une, table générale, de sorte que "si le nœud existe, affichage de la table "Info" nœuds, et si non, afficher le TEXTE", fait très peu de sens.
Donc, vous dites qu'un texte doit être indiqué si la addInfo élément n'est pas présent?
Oui, définitivement, je le veux comme Rnet dit.
qu'est-ce que "si à l'intérieur de XML sera nœud" ? êtes-vous en train de dire "si certains nœud existe cela"?
Votre question n'est pas claire. Exactement où vous voulez insérer ce test? Vous n'avez qu'une, table générale, de sorte que "si le nœud existe, affichage de la table "Info" nœuds, et si non, afficher le TEXTE", fait très peu de sens.
Donc, vous dites qu'un texte doit être indiqué si la addInfo élément n'est pas présent?
Oui, définitivement, je le veux comme Rnet dit.
qu'est-ce que "si à l'intérieur de XML sera nœud" ? êtes-vous en train de dire "si certains nœud existe cela"?
OriginalL'auteur vBB | 2014-12-19
Vous devez vous connecter pour publier un commentaire.
Ce sorties
Yep
si<AddInfo>
existe qu'à un enfant de<Record>
, etNope
autrement:Notez que vous n'avez pas besoin
for-each
, vous devriez laisser un deuxième modèle de correspondre à chaque<Record>
:Vous pourriez aussi éviter
choose
et l'utilisation de deux indépendantsif
conditions:Si vous ne voulez pas vous limiter à des enfants immédiats, l'utilisation
.//AddInfo
à la place.Considérer la feuille de style suivant:
Il sorties
si il n'y a pas
<AddInfo>
nœud dans<Record>
, etautrement.
Vous pouvez résoudre ce problème ni avec l'aide de
if
nichoose
. XML:XSLT:
De sortie:
La condition nœud doit envelopper tous les nœuds qui génèrent le 2ème tableau de cours. Voir ma réponse mis à jour.
Merci!!!! Maintenant ça fonctionne 🙂
+ 1 Bon code. Juste une petite remarque: Si vous savez que votre structure d'entrée bien, il n'est pas nécessaire de taper l'ensemble de la hiérarchie de l'élément dans le modèle correspond à (par exemple
Data/Records/Record/AddInfo/Info
).Vrai, mais il assure que pas aussi appelés nœuds sont appariés à partir d'autres chemins. Vous ne savez pas si il y a une différence de performance.
OriginalL'auteur CoDEmanX
Pour vérifier si le nœud existe en xml ce code XSLT œuvres
OriginalL'auteur Girish kumrawat