如何在xml中忽略没有引号的属性

时间:2017-11-14 11:36:33

标签: html xml bash xmlstarlet

我想计算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:“或'预期 属性构造错误

如何忽略该属性没有“”?

2 个答案:

答案 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系统上)。