xmlstarlet Fritzbox FB电话簿到CSV
我正在尝试将从FritzBox下载的XML电话簿转换为CSV文件。 XML中的contact元素有一个realName和一对多的telephony/number元素。我只对属性为work和home的元素感兴趣 生成的CSV文件应具有三列:xmlstarlet Fritzbox FB电话簿到CSV,xml,xmlstarlet,fritzbox,Xml,Xmlstarlet,Fritzbox,我正在尝试将从FritzBox下载的XML电话簿转换为CSV文件。 XML中的contact元素有一个realName和一对多的telephony/number元素。我只对属性为work和home的元素感兴趣 生成的CSV文件应具有三列: 元素/contact/realName的Col1值 Col2具有属性“work”的元素/联系人/电话/号码的值 Col3具有属性“home”的元素/联系人/电话/号码的值 带有一个联系人的XML示例: <phonebooks> <pho
- 元素/contact/realName的Col1值
- Col2具有属性“work”的元素/联系人/电话/号码的值
- Col3具有属性“home”的元素/联系人/电话/号码的值
<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>
我需要在输出中使用类似“IF-THEN”的内容,以便根据类型属性home或work导出特定的数字
有没有像这样的IF-THEN
xmlstarlet ...
-v "concat(
realName,';',
IF type="work" THEN number,';'
IF type="home" THEN number,';'
)" test.xml
您可以使用谓词来执行此操作(
number[@type='work']
仅选择具有值为work
的属性type
的number
元素):
输出为:
Paul Tiger;071150885524;0151-19630027
我还将XPath表达式更改为绝对路径,以使它们更具描述性。当然,这不是强制性的。请描述您的具体问题。我们不知道你已经尝试了什么,你在哪里卡住了。
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