xml - 使用 xmlstarlet 将 XML 转换为 CSV 没有成功
问题描述
我有一个格式如下的 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<appname version="2.3">
<system name="web host">
<username><![CDATA[username1]]></username>
<password><![CDATA[password1]]></password>
<note><![CDATA[]]></note>
<url><![CDATA[]]></url>
</system>
<system name="vendor name">
<username><![CDATA[username@email.com]]></username>
<password><![CDATA[password2]]></password>
<note><![CDATA[]]></note>
<url><![CDATA[]]></url>
</system>
<system name="vendor name 3">
<username><![CDATA[username@email.com]]></username>
<password><![CDATA[password3]]></password>
<note><![CDATA[]]></note>
<url><![CDATA[]]></url>
</system>
<appname>
我正在尝试使用:
xmlstarlet \
sel -T -t -m /root/system \
-v "concat(@name,',',username,',',password,',',note,',',url)" \
-n filename.xml
我得到:
failed to load external entity "concat(@name,',',username,',',password,',',note,',',url)-n"
我只想要当前文档中的制表符分隔文档,以便将其导入另一个密码管理器。我有数百个条目,我真的不想重新输入。
任何人都可以帮忙吗?
解决方案
使用西德尔:
xidel -s vendor.xml -e "/appname/system/join((./@name, ./username/text(), ./password/text()), x:cps(9))"
生产:
web host username1 password1
vendor name username@email.com password2
vendor name 3 username@email.com password3
感谢@Reino 提供打印 TAB 字符和 arg 位置的技巧。在 cmd.exe 和 Cygwin bash 上测试了引号。
推荐阅读
- c++ - C2065 'cout':未声明的标识符
- css - Boostrap Vue:将类名与标签混合
- angular - NGRX 选择器在存储中可用之前请求数据
- javascript - 出现 javascript 错误,但在 chrome 的开发人员工具中找不到代码的位置
- vbscript - Windows 功能更新 1803 下的 VBSCRIPT 缓慢
- powershell - PowerShell/Batch 从文件夹名称中删除结束文本
- c - C 套接字编程 - 连接到外部源
- r - R过滤包含单词组合的行
- python - 如何在使用 BasicLSTMCell tensorflow 进行序列分类时打印(或查看)i、j、f 和 o 门值和维度?
- c++ - assert() 是否在发布模式下充当身份函数?