我有以下文件log.xml:
<?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>
如果我运行以下命令,则使用xmlstarlet 1.6.1在Window 7上
xml sel -t -m&#34; / EntryList / Entries / RankedEntry / Entry / entryType&#34; -v&#34;。&#34; log.xml
预期结果是:
1
26
3
实际值: 但我没有得到任何回报
任何想法如何解决?
答案 0 :(得分:3)
您必须考虑命名空间。使用XMLStarlet -N
选项定义名称空间前缀:
-N <name>=<value> - predefine namespaces (name without 'xmlns:')
ex: xsql=urn:oracle-xsql
Multiple -N options are allowed.
然后这个XMLStarlet命令:
xml sel -N s=http://schemas.datacontract.org/2004/07/ -t -v "/s:EntryList/s:Entries/s:RankedEntry/s:Entry/s:entryType" log.xml
将产生请求的输出:
1
26
3
答案 1 :(得分:1)
从版本1.2.1开始,您可以使用de default namespace _
(删除-N
参数)
xml sel -t -v "/_:EntryList/_:Entries/_:RankedEntry/_:Entry/_:entryType" log.xml
正如here所说:
1.3。更方便的解决方案
XML文档也可以使用不同的名称空间前缀 文件中的元素。为了处理名称空间更大 简单,XMLStarlet(版本1.2.1+)将使用名称空间前缀 在输入文档的根元素上声明。默认 命名空间将绑定到前缀&#34; _&#34;和&#34; DEFAULT&#34; (在版本中 1.5.0 +)。