Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmlstarlet Fritzbox FB电话簿到CSV_Xml_Xmlstarlet_Fritzbox - Fatal编程技术网

xmlstarlet Fritzbox FB电话簿到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

我正在尝试将从FritzBox下载的XML电话簿转换为CSV文件。 XML中的contact元素有一个realName和一对多的telephony/number元素。我只对属性为work和home的元素感兴趣

生成的CSV文件应具有三列:

  • 元素/contact/realName的Col1值
  • Col2具有属性“work”的元素/联系人/电话/号码的值
  • Col3具有属性“home”的元素/联系人/电话/号码的值
带有一个联系人的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>
我需要在输出中使用类似“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