0

我的 XML 文件很少,而且一些用户在中间添加了额外的空格(例如在元素标签或文本标签中),比较多个版本的文件变得非常困难。

示例(xml 文件)

    <?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author   >
      <title>XML Developer's Guide      </title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102"     >
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
</catalog>

正如您在上面的示例代码中看到的,作者的元素标签和第一本书元素中标题的文本节点有额外的空格。同样,第二本书元素的元素标签有额外的空格。

我想要一个正则表达式来搜索这些类型的空格(超过 1 个相邻的空格),但我不想要前导空格。如果我不留下前导空格(行首),并用单个空格替换它们,缩进将丢失。

有一些方法可以处理这个问题(比如首先删除所有双+空格并在文件上执行 xmllint --format),但如果有人可以给我一个用于行中间空格的 reg exp 会很有帮助。

我尝试了 ^、\s 和 ^\s 的组合,但我似乎无法得到解决方案。因此,如果有人可以提出建议,那将非常有帮助。(文本节点中的多个空格根据我们项目的设计是不正确的值,因此删除它们不会造成任何不利影响)

4

1 回答 1

2

这可能对您有用(GNU sed):

sed -r 's/(\S)\s+([<>])/\1\2/g' file

这会查找一个非空格,后跟一个或多个空格,然后是 a<或 a >,并删除空格一次或多次。

于 2013-08-12T12:56:18.690 回答