You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xmllint去除Gnote生成XML中<note-content>文本输出的多余空行?

如何使用xmllint去除Gnote生成XML中文本输出的多余空行?

我来帮你分析问题并给出解决方案:

问题根源

你遇到的多余空行,其实是Gnote生成的XML结构和文本节点自带的空白换行共同导致的:
Gnote在生成XML时,会在<note-content>、<list>等元素前后插入包含换行、空格的空白文本节点;同时每个<list-item>里的文本也自带换行符。你的原始XPath只是过滤了完全空白的节点,但没有处理节点内部的多余换行,所以输出时这些换行就变成了多余的空行。

正确的xmllint命令

直接用下面的命令,就能得到你想要的无多余空行的输出:

xmllint --xpath "//*[local-name()='note-content']//text()[normalize-space()]/normalize-space(.)" a.xml

命令解释

  1. //*[local-name()='note-content']//text()[normalize-space()]:选中<note-content>下所有非空白的文本节点(过滤掉完全是换行、空格的空节点);
  2. /normalize-space(.):对每个选中的文本节点,去除内容前后的所有空白(包括换行、空格),同时把内容中间的多个空白合并成一个(你的内容里没有这种情况,不影响结果);
  3. xmllint会自动把每个处理后的文本内容按顺序输出,每个内容占一行,正好符合你要的格式。

为什么之前的命令不行?

  • 你尝试的normalize-space(//text()) | ...报错,是因为XPath中normalize-space()返回的是字符串,而|操作符只能用于节点集,类型不匹配所以报错;
  • 只加[normalize-space()]过滤节点,只是去掉了完全空白的节点,但没处理节点内部的多余换行,所以输出还是会有空行;
  • 去掉XML里的换行后命令有效,是因为XML里的空白文本节点被去掉了,剩下的文本节点没有多余换行,自然输出正常。

备注:内容来源于stack exchange,提问作者Yetoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:34:13