代码之家  ›  专栏  ›  技术社区  ›  Helvinion

使用XMLint对空XML标记进行的格式化无效

  •  -1
  • Helvinion  · 技术社区  · 6 年前

    我有一个XML未格式化的文档,如下所示:

    <foo>
    <bar>
    <hop>
    <hey>
    </hey>
    </hop>
    </bar>
    </foo>
    

    正如您所看到的,标记“hey”是空的。我记得在这种情况下,应该这样写 <hey/> 但这不是我能改变的。

    要格式化此文档,我使用 xmllint --format 命令但不是输出

    <foo>
      <bar>
        <hop>
          <hey>
          </hey>
        </hop>
      </bar>
    </foo>
    

    <foo>
      <bar>
        <hop>
          <hey></hey>
        </hop>
      </bar>
    </foo>
    

    it输出

    <foo>
      <bar>
        <hop>
          <hey>
    </hey>
        </hop>
      </bar>
    </foo>
    

    这不是我想要的。我试图编写一个sed命令,以便在xmlint工作后缩进这些特定的标记,但我无法阻止sed加载整个(巨大的)xml文件,这需要几分钟的时间,就像xmlint一样多。

    解决方案是找到一个选项,要求xmllint正确格式化这些标记,但我在man中找不到它。你知道什么可以帮助我吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Michael Kay    6 年前

    这个 hey 元素不是空的,它包含一个值为换行符的文本节点。重新格式化XML的进程通常会尊重这一点,并保持元素的值不变。