我想计算tag1发生的次数 提供此123.xml文件(从互联网流式传输)
<startend>
<tag1 name=myname>
<date>10-10-10</date>
</tag1 >
<tag1 name=yourname>
<date>11-10-10</date>
</tag1 >
</startend>
使用: xmlstarlet sel -t -v“count(// tag1)”123.xml
输出:
AttValue:“或'预期 属性构造错误
如何忽略该属性没有“”?
答案 0 :(得分:2)
您输入的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
- 输入为HTML 2>/dev/null
- 压制错误/警告答案 1 :(得分:0)
XML始终需要引用属性值。如果要继续使用XML,首先必须从输入中生成有效的XML。您可以使用SGML处理器(例如OpenSP(特别是osx
程序))将输入格式化为格式良好的XML。就像在其上调用osx <your Input file>
一样简单。
如果您使用的是Ubuntu / Debian Linux,则可以通过在命令行上调用osx
来安装sudo apt-get install opensp
(类似地在其他Unix系统上)。