我想数一数tag1发生了多少次,给出这个123.xml文件(从互联网上流)
<startend>
<tag1 name=myname>
<date>10-10-10</date>
</tag1 >
<tag1 name=yourname>
<date>11-10-10</date>
</tag1 >
</startend>使用:xmlstarlet -t -v "count(//tag1)“123.xml
产出:
AttValue:“或”预期属性构造错误
如何忽略该属性没有“”?
发布于 2017-11-14 11:48:10
输入XML/HTML结构有无效的标记/属性,应该提前恢复:
xmlstarlet解决方案:
xmlstarlet fo -o -R -H -D 123.xml 2>/dev/null | xmlstarlet sel -t -v "count(//tag1)" -n产出:
2详细信息:
fo (or format)格式的XML文档-o or --omit-decl -省略xml声明-R or --recover -尝试恢复可解析的内容-D or --dropdtd -删除输入文档的DOCTYPE-H or --html -输入是HTML2>/dev/null -抑制错误/警告发布于 2017-11-14 11:50:18
XML总是需要属性值周围的引号。如果要继续使用XML,首先必须从输入生成有效的XML。您可以使用SGML处理器(如OpenSP (特别是osx程序))将输入格式化为格式良好的XML。它就像在上面调用osx <your Input file>一样简单。
如果您在Ubuntu/Debian上,您可以通过在命令行调用osx (以及其他Unix系统上类似的sudo apt-get install opensp )来安装sudo apt-get install opensp。
https://stackoverflow.com/questions/47284823
复制相似问题