我正在尝试将从FritzBox下载的XML转换为CSV文件。XML中的contact元素有一个realName和一对多的电话/数字元素。我只对带有属性work和home的元素感兴趣。
生成的CSV文件应该有三列:
只有一个联系人的XML示例:
<phonebooks>
<phonebook name="Telefonbuch">
<contact>
<category/>
<person>
<realName>Paul Tiger</realName>
</person>
<telephony nid="4">
<number type="work" id="1" vanity="" prio="1">071150885524</number>
<number type="home" prio="0" id="3">0151-19630027</number>
</telephony>
<services/>
</contact>
</phonebook>
</phonebooks>我设法用以下方法提取realName和数字:
xmlstarlet sel -t -m //contact/* -v "concat(realName,';',number)" test.xml
;Paul Tiger;;071150885524;我需要类似于输出中的“如果那么”这样的东西来导出基于类型属性home或work的特定数字。
有没有像这样的东西。
xmlstarlet ...
-v "concat(
realName,';',
IF type="work" THEN number,';'
IF type="home" THEN number,';'
)" test.xml发布于 2018-08-06 15:19:47
您可以使用谓词(number[@type='work']只选择具有带有值work的属性type的number元素):
xmlstarlet sel -t -m /phonebooks/phonebook/contact -v "concat(person/realName,';',telephony/number[@type='work'],';',telephony/number[@type='home'])" test.xml输出是:
Paul Tiger;071150885524;0151-19630027我还将您的XPath表达式更改为绝对路径,以使它们更具描述性。当然,这不是强制性的。
https://stackoverflow.com/questions/51705586
复制相似问题