【发布时间】:2018-11-14 10:25:50
【问题描述】:
XML 示例:
<hosts>
<host>
<name>Server A</name>
<status>0</status>
<groups>
<group>
<name>Discovered hosts</name>
</group>
</groups>
<interfaces>
<interface>
<ip>10.1.2.3</ip>
</interface>
</interfaces>
</host>
<host>
<name>Server B</name>
<status>0</status>
<groups>
<group>
<name>Discovered hosts</name>
</group>
</groups>
<interfaces>
<interface>
<ip>10.1.2.4</ip>
</interface>
</interfaces>
</host>
</hosts>
我尝试将条目导出到 CSV 文件,如下所示:
Discovered hosts,Server A,10.1.2.3,0
Discovered hosts,Server B,10.1.2.4,0
与xmlstarlet、guiding 与:
一个文件中可以有多个--match、--copy-of、--value-of等选项 单个模板。应用命令行模板的效果可以是 用下面的 XSLT 模拟来说明
xml sel -t -c "xpath0" -m "xpath1" -m "xpath2" -v "xpath3" \ -t -m "xpath4" -c "xpath5"
但我的结果与预期不同:
$ xmlstarlet sel -t \
-m "//host/groups/group/name" -v . -o "," \
-m "//host/name" -v . -o "," \
-m "//host/interfaces/interface/ip" -v . -o "," \
-m "//host/status" -v . -n sample.xml
Discovered hosts,Server A,10.1.2.3,0
0
10.1.2.4,0
0
Server B,10.1.2.3,0
0
10.1.2.4,0
0
Discovered hosts,Server A,10.1.2.3,0
0
10.1.2.4,0
0
Server B,10.1.2.3,0
0
10.1.2.4,0
0
使用grep 之类的解决方法很明显(这正是我所做的),但我想了解如何正确使用它以及导致这种不明显行为的原因。
【问题讨论】:
标签: xml csv export-to-csv xmlstarlet