首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlStarlet查询XML

XmlStarlet查询XML
EN

Stack Overflow用户
提问于 2015-03-05 12:42:19
回答 1查看 140关注 0票数 0

我有这个XMLStarlet,您可以帮助我在shell脚本中使用XMLStarlet提取所有项的值吗?

代码语言:javascript
复制
<transfer-matrix.xml>
    <transfers>
        <rows>
            <item>
                <item>Hungary</item>
                <item>Kharkov-KIPT-LCG2</item>
                <item>9882899680</item>
                <item>4</item>
                <item>1</item>
            </item>
            <item>
                <item>Spain</item>
                <item>Kharkov-KIPT-LCG2</item>
                <item>32945102817</item>
                <item>12</item>
                <item>2</item>
            </item>
            <item>
                <item>Finland</item>
                <item>Kharkov-KIPT-LCG2</item>
                <item>10737418240</item>
                <item>4</item>
                <item>0</item>
            </item>
            <item>...</item>
            <item>...</item>
            <item>...</item>
        </rows>
        <key>...</key>
    </transfers>
<params>...</params>
</transfer-matrix.xml>

我试着用这样的方式提取物品

代码语言:javascript
复制
outcome=`xml sel -T -t -m /transfer-matrix.xml/transfers/rows/item -s D:N:- "@item" -v "concat(@item,'|',item,'|',item,'|',item,'|',item,'|',item)" -n /usr/share/dashboard/xml/transfers-country.xml`

我的产出是:

代码语言:javascript
复制
|Hungary|Hungary|Hungary|Hungary|Hungary |Spain|Spain|Spain|Spain|Spain |Finland|Finland|Finland|Finland|Finland

我需要这样的格式

代码语言:javascript
复制
|Hungary|Kharkov-KIPT-LCG2|9882899680|4|1
|Spain|Kharkov-KIPT-LCG2|32945102817|12|2 
|Finland|Kharkov-KIPT-LCG2|10737418240|4|0

我很感谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 13:19:57

您需要指定您想要的元素,并在末尾添加新的行字符,如下所示:

代码语言:javascript
复制
OUTPUT=$(xmlstarlet sel -T -t -m /transfer-matrix.xml/transfers/rows/item -s D:N:- "@item" -v "concat(@item,'|',item[1],'|',item[2],'|',item[3],'|',item[4],'|',item[5],'\n')" transfers-country.xml)

然后您可以通过echo -e获得所需的结果。

代码语言:javascript
复制
$ echo -e "$OUTPUT"
|Hungary|Kharkov-KIPT-LCG2|9882899680|4|1
|Spain|Kharkov-KIPT-LCG2|32945102817|12|2
|Finland|Kharkov-KIPT-LCG2|10737418240|4|0

编辑:正如npostavs所指出的,最好使用-n标志来代替:

代码语言:javascript
复制
$ xmlstarlet sel -T -t -m /transfer-matrix.xml/transfers/rows/item -s D:N:- "@item" -n -v "concat(@item,'|',item[1],'|',item[2],'|',item[3],'|',item[4],'|',item[5])" transfers-country.xml

|Hungary|Kharkov-KIPT-LCG2|9882899680|4|1
|Spain|Kharkov-KIPT-LCG2|32945102817|12|2
|Finland|Kharkov-KIPT-LCG2|10737418240|4|0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28878122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档