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 : 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>
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
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="'&#xa;'" />
    <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 : 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 ;
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.