Search code examples
xmlxmlstarlet

XMLStarlet: How to select XML, returning empty


I have a pretty easy problem to solve, but have been at it for days without luck.

I have an XML document like this:

<?xml version="1.0"?>
<readiness>
    <model>
        <name>Power</name>
        <state>
            <pdlReq>PASS</pdlReq>
            <fileReq>PASS</fileReq>
        </state>
    </model>
</readiness>

And I am trying to select.. anything really. I can't get even the simpliest examples to work. What I've tried:

  • xmlstarlet sel -T -t -m "//readiness" modelReadinessState.xml
  • xmlstarlet sel -T -t -m "/readiness" modelReadinessState.xml
  • xmlstarlet sel -T -t -m "readiness" modelReadinessState.xml
  • xmlstarlet sel -T -t -m "/readiness/model[name='Power']" -v pdl modelReadinessState.xml
  • xmlstarlet sel -T -t -m "/readiness/model[name='Power']" -v pdl -n modelReadinessState.xml
  • xmlstarlet sel -T -t -m "/readiness/model[name='Power']" modelReadinessState.xml
  • xmlstarlet sel -t -m "//readiness" modelReadinessState.xml
  • xmlstarlet sel -t -m "/readiness" modelReadinessState.xml
  • xmlstarlet sel -t -m "readiness" modelReadinessState.xml

I have no idea why it's not working :( I just get blanks returned back.

Note: There are no namespaces defined in this xml file.

Any ideas?


Solution

  • Try these:

    xmlstarlet sel  -t -c  "//readiness"           modelReadinessState.xml
    
    xmlstarlet sel  -t -c  "readiness/model/name"  modelReadinessState.xml
    
    xmlstarlet sel  -t -v  "readiness/model/name"  modelReadinessState.xml