捕获xml标记并跟踪相关标记(如果存在)
我希望从下面的(剪裁)XML文件中提取节目标题和子标题。我使用xmllint和sed分别提取这两个条目,并将它们合并到一个文件中,但后来我发现偶尔会有条目只有标题而没有子标题。在这种情况下,我想将子标题留空。有人能提出一种解释这种差异的方法吗 XML文件捕获xml标记并跟踪相关标记(如果存在),xml,linux,bash,sed,xmllint,Xml,Linux,Bash,Sed,Xmllint,我希望从下面的(剪裁)XML文件中提取节目标题和子标题。我使用xmllint和sed分别提取这两个条目,并将它们合并到一个文件中,但后来我发现偶尔会有条目只有标题而没有子标题。在这种情况下,我想将子标题留空。有人能提出一种解释这种差异的方法吗 XML文件 <programme start="20171013170000 +0100" stop="20171013180000 +0100" channel="b492458d826d592ec7c528545a16c757"> &l
<programme start="20171013170000 +0100" stop="20171013180000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">Accessories Gift Hall</title>
<sub-title lang="eng">Find the perfect gift with fashion accessories by some of our most sought-after brands. From chic purses and wallets to cosy PJs and slippers, there's something for everyone.</sub-title>
</programme>
<programme start="20171013180000 +0100" stop="20171014130000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">..programmes start again at 1pm</title>
</programme>
<programme start="20171014130000 +0100" stop="20171014140000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">Ruth Langsford's Fashion Edit</title>
<sub-title lang="eng">TV personality and QVC fashion ambassador, Ruth Langsford, shares her favourite looks and must-have pieces that will transform your wardrobe and have you looking fabulously stylish.</sub-title>
</programme>
配件礼堂
通过一些我们最受欢迎的品牌的时尚配饰,找到完美的礼物。从别致的钱包到舒适的睡衣和拖鞋,都有&apos;这对每个人都有好处。
…节目下午1点开始
露丝·朗斯福德;s时尚编辑
电视名人和QVC时尚大使露丝·兰斯福德(Ruth Langsford)分享了她最喜欢的造型和必备品,这些造型和必备品将改变你的衣柜,让你看起来非常时尚。
Bash命令v1
xmllint --xpath "//programme/title" xmltv | sed -r 's/\n//g' | sed 's/<\/title>/\n/g' | sed 's/<title lang="eng">//g' > 1.txt
xmllint --xpath "//programme/sub-title" xmltv | sed -r 's/\n//g' | sed 's/<\/sub-title>/\n/g' | sed 's/<sub-title lang="eng">//g' > 2.txt
paste <(cat 1.txt) <(cat 2.txt) > 3.txt
xmllint--xpath”//program/title“xmltv|sed-r's/\n//g'| sed's//\n/g'| sed's///g'>1.txt
xmllint--xpath”//program/sub title“xmltv|sed-r's/\n//g'|sed's//\n/g'|sed's////g'>2.txt
粘贴我要做的事情:
#!/bin/bash
count=$(xmllint --xpath "count(//programme)" /tmp/file.xml)
for ((i=1; i<=count; i++)); do
xmllint --xpath "//programme[$i]/title/text()" /tmp/file.xml
echo -n '|'
xmllint --xpath "//programme[$i]/sub-title/text()" /tmp/file.xml
echo
done
#/bin/bash
count=$(xmllint--xpath“count(//program)”/tmp/file.xml)
对于(i=1;ised一次通过
sed '/<title/!d;N;/<sub-title/!s/\n.*//' XML File
sed'/下面是一个使用命令行中的命令的示例
$xmlstarlet sel-T-T-m'//程序'-v'concat(规范化空间(标题),'',规范化空间(子标题))'-n input.xml
配饰礼品厅通过一些我们最受欢迎的品牌的时尚配饰找到完美的礼物。从别致的钱包和钱包到舒适的睡衣和拖鞋,都有适合每个人的东西。
…节目下午1点开始
Ruth Langsford的时尚编辑电视个性和QVC时尚大使Ruth Langsford分享了她最喜欢的外观和必备品,这些将改变你的衣柜,让你看起来非常时尚。
我用一个空格分隔标题和子标题,但这是可以更改的。我认为xmlstarlet是完成此任务的更好选择;您是否对xmlstarlet解决方案感兴趣?是的,丹尼尔,我也听说过xmlstarlet,我不完全确定它和xmllint之间的区别。区别在于xmlstarlet使用换行符显示每个结果行(xmllint不是这种情况),直到有人格式化XML,并且标题
或副标题
不再在同一行。()是的,我需要去掉xml,让标题和子标题理想地挨在一起。很好,但很慢。到目前为止,完整文件只需要15分钟,还有一些“XPath集为空”错误。这看起来很正确,而且非常快!我想我应该改学xmlstarlet!谢谢!不错,是的。