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 :je voudrais donc lui donner une valeur par défaut pour, àmha, simplifier le code XSLT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
mais "ça marche pas" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>la condition fonctionne, mais pas l'affectation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
une autre chose : si j'utilise select dans xsl:attribute, j'obtiens un core dumped, sans autre renseignement.
Partager