2012-04-07 61 views
0

我有一个小的xml文档,我需要使用xmllint提取一些值。我能够通过使用xmllint --shell xmlfilename命令来浏览xml层次结构。但我无法提取这些值。我不想使用grep /任何模式匹配命令,因为这已经完成并且是成功的。我将不胜感激任何关于xmlliint的帮助。这是我的文件在PNG格式。我想提取300 $和500 $('值')。使用xmllint从xml文件中提取数据

<?xml version="1`.`0" encoding="ISO-8859-1"?> 
<adi> 
    <asset> 
     <electronics item="Mobile" name="Nokia" value="300$" /> 
     <electronics item="Mobile" name="Sony" value="500$" /> 
    </asset> 
</adi> 

另一个疑问是,这两个集合是不同的表示形式吗?

<?xml version="1.0 encoding="ISO-8859-1"?> 
<adi> 
    <asset> 
     <electronics> 
      <item> Mobile </item> 
      <name>Nokia</name> 
      <value>300$</value> 
     </electronics> 
     <electronics> 
      <item> Mobile </item> 
      <name>Sony</name> 
      <value>500$</value> 
     </electronics> 
    </asset> 
</adi> 
+1

看看这种任务的xmlstarlet。或者注意你的标签下面的follwer计数(当你翻转它们)并为xml或xmlstarlet添加一个标签。祝你好运。 – shellter 2012-04-16 05:21:27

回答

-1

晚,但同时搜索标签xmllint比赛的第一页,我现在回答你;)

使用--xpath代替--xpath像下面

xmllint --xpath '//electronics/value/text()' second-xml_file.xml 
+1

xpath不工作 – 2013-11-06 10:21:09

+0

xpath工作,这是破坏的xml源。在第一行看到缺失的'“' – 2013-11-06 13:01:18

+5

它的说法--xpath选项在xmllint中不可用 – 2013-11-07 04:46:59

0

关于你的第二个问题,这两个代码段做而不是代表相同的XML内容。属性和子元素不相同。子元素可以是任意XML树的根元素,但属性是原子的。

例如,I可以修改第二片段是这样的:

<?xml version="1.0 encoding="ISO-8859-1"?> 
<adi> 
    <asset> 
     <electronics> 
      <item> 
       Mobile 
       <sub-item>Phone</sub-item> 
      </item> 
      <name>Nokia</name> 
      <value>300$</value> 
     </electronics> 
     <electronics> 
      <item> Mobile </item> 
      <name>Sony</name> 
      <value>500$</value> 
     </electronics> 
    </asset> 
</adi> 

其中我已经加入<sub-item>Phone</sub-item>到第一<item>元件。 但是,如果item是一个属性,则不存在等效项,如第一个片段中所示。