我正在尝试将从 FritzBox 下载的 XML 电话簿转换为 CSV 文件。XML 中的联系人元素具有实名和一对多电话/号码元素。我只对属性为 work 和 home 的元素感兴趣。
生成的 CSV 文件应包含三列:
- Col1 元素的值 /contact/realName
- 具有属性“work”的元素/contact/telephony/number 的 Col2 值
- 具有属性“home”的元素 /contact/telephony/number 的 Col3 值
一个联系人的 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>
我设法通过以下方式提取了真实姓名和号码:
xmlstarlet sel -t -m //contact/* -v "concat(realName,';',number)" test.xml
;Paul Tiger;;071150885524;
我需要输出中的“IF THEN”之类的东西来根据类型属性 home 或 work 导出特定的数字。
有没有像这样的 IF THEN 之类的东西。
xmlstarlet ...
-v "concat(
realName,';',
IF type="work" THEN number,';'
IF type="home" THEN number,';'
)" test.xml