ajouter un attribut et lui affecter une valeur
Bonjour,
je poursuis mes pérégrinations dans XSLT;
je traite la sortie de nmap -sn -PR -oX - 192.168.1.0/24,
or, parfois l'attribut @vendor n'existe pas :
Code:
1 2 3 4 5 6 7 8
| <host>
<status state="up" reason="localhost-response"
reason_ttl="0" />
<address addr="192.168.1.98" addrtype="ipv4" />
<hostnames>
<hostname name="maMachine" type="PTR" /> <!--là, en général, il y a un attribut vendor, qui ici est absent; c'est normal -->
</hostnames>
</host> |
je voudrais donc lui donner une valeur par défaut pour, àmha, simplifier le code XSLT.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?xml version="1.1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" />
<xsl:variable name="linFeed" select="'
'" />
<xsl:variable name="noV" select="'noVendor'" />
<xsl:template match="nmaprun">
<xsl:apply-templates select="host" />
</xsl:template>
<xsl:template match="host">
<xsl:apply-templates select="address" />
</xsl:template>
<xsl:template match="address">
<xsl:if test="@addrtype='mac'">
<xsl:if test="not(@vendor)">
la condition est vrai : il n'y a pas d'attribut @vendor
<xsl:copy>
<xsl:attribute name="vendor">valeur par défaut</xsl:attribute>
</xsl:copy>
</xsl:if>
<xsl:value-of select="concat(@addr,' ; ',@vendor, $linFeed)" />
</xsl:if>
</xsl:template>
</xsl:stylesheet> |
mais "ça marche pas" :
Code:
1 2 3 4 5 6 7
| _a:dr:es:se:_m:ac ; SFR
_a:dr:es:se:_m:ac ; D-Link
_a:dr:es:se:_m:ac ; SFR
_a:dr:es:se:_m:ac ; Netgear
la condition est vrai : il n'y a pas d'attribut @vendor
_a:dr:es:se:_m:ac ; |
la condition fonctionne, mais pas l'affectation. :(
une autre chose : si j'utilise select dans xsl:attribute, j'obtiens un core dumped, sans autre renseignement. :?