2017-01-03 4 views
1

Ich habe ein svg bekam, dass die enthält folgende (abgespeckte):xmlstarlet: select-Attribut, wenn das Kind existiert

<svg 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"> 
    <g 
    inkscape:label="base" 
    inkscape:groupmode="layer" 
    id="layer1" 
    transform="translate(0,-600)"> 
    <image 
     sodipodi:absref="/Untitled.png" 
     xlink:href="/Untitled.png" 
     width="800" 
     height="500" 
     preserveAspectRatio="none" 
     id="image5168" 
     x="3.67" 
     y="596" /> 
    </g> 
    <g 
    inkscape:groupmode="layer" 
    id="layer30" 
    inkscape:label="triangle"> 
    <path 
     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" 
     d="M 273,340 290,127 563,307 Z" 
     id="path5174" 
     inkscape:connector-curvature="0" /> 
    </g> 
</svg> 

Complete XML

Wenn ich Abfrage mit:

xmlstarlet sel -t -v "//_:svg/_:g/@inkscape:label" drawing.svg

Ich bekomme:

base 
triangle 

Ich habe durch die Bedingungen gegraben, aber ich kann g 's ginkscape:label nur finden, wenn es einen path Knoten enthält [oder andernfalls, wenn es keinen image Knoten enthält].

Antwort

2

Um nur g, das Kind hat path Sie einfach path in einem Prädikat für g hinzufügen:

//_:svg/_:g[_:path]/@inkscape:label 
+0

Oh danke! Das funktioniert perfekt. – carlbently

Verwandte Themen