Xml sel -t -m not working for me at all

I have the following log.xml file:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<EntryList xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/">
  <Entries>
    <RankedEntry>
      <Entry>
        <id>1</id>
        <code1>001</code1>
        <displayName>Entry 1</displayName>
        <code2>003</code2>
        <code3>0100000000000005203</code3>
        <actualName>Entry Number 1</actualName>
        <entryType>1</entryType>
        <metaScore>1</metaScore>
        <usage>81</usage>
      </Entry>
      <factor>30.738496780395508</factor>
      <virtualFactor>45.738494873046875</virtualFactor>
    </RankedEntry>
    <RankedEntry>
      <Entry>
        <id>2</id>
        <code1>001</code1>
        <displayName>Entry 2</displayName>
        <code2>003</code2>
        <code3>0200000000000005203</code3>
        <actualName>Entry Number 2</actualName>
        <entryType>26</entryType>
        <metaScore>1</metaScore>
        <usage>61</usage>
      </Entry>
      <factor>40.738496780395508</factor>
      <virtualFactor>55.738494873046875</virtualFactor>
    </RankedEntry>
    <RankedEntry>
      <Entry>
        <id>3</id>
        <code1>001</code1>
        <displayName>Entry 3</displayName>
        <code2>003</code2>
        <code3>0300000000000005203</code3>
        <actualName>Entry Number 3</actualName>
        <entryType>3</entryType>
        <metaScore>1</metaScore>
        <usage>41</usage>
      </Entry>
      <factor>50.738496780395508</factor>
      <virtualFactor>65.738494873046875</virtualFactor>
    </RankedEntry>
  </Entries>    
</EntryList>

In window 7 using xmlstarlet 1.6.1, if I run the following command,

xml sel -t -m "/ EntryList / Entries / RankedEntry / Entry / entryType" -v "." log.xml

Expected Result:

1
26
3

Actual: But I get nothing

Any ideas how to fix this?

+4
source share
2 answers

You need to consider the namespace. Define the namespace prefix using the XMLStarlet parameter -N:

  -N <name>=<value>         - predefine namespaces (name without 'xmlns:')
                              ex: xsql=urn:oracle-xsql
                              Multiple -N options are allowed.

Then this XMLStarlet command:

xml sel -N s=http://schemas.datacontract.org/2004/07/ -t -v "/s:EntryList/s:Entries/s:RankedEntry/s:Entry/s:entryType" log.xml

Will produce the requested result:

1
26
3
+3
source

1.2.1 _
( -N)

xml sel -t -v "/_:EntryList/_:Entries/_:RankedEntry/_:Entry/_:entryType" log.xml

:

1,3.

XML- . , XMLStarlet ( 1.2.1+) . "_" "DEFAULT" ( 1.5.0 +).

+1

All Articles