Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmlstarlet-删除换行符_Xml_Linux_Xmlstarlet - Fatal编程技术网

xmlstarlet-删除换行符

xmlstarlet-删除换行符,xml,linux,xmlstarlet,Xml,Linux,Xmlstarlet,我有以下文件log.xml: <entry> <message>Line 1 Line 2 and so on</message> </entry> 结果是: Line 1@ Line 2 and so on 在CentOS 6上使用xmlstarlet: 1.3.1 compiled against libxml2 2.7.6, linked with 20706 compiled against libxslt 1.1.26, l

我有以下文件
log.xml

<entry>
  <message>Line 1
  Line 2 and so on</message>
</entry>
结果是:

Line 1@  Line 2 and so on
在CentOS 6上使用xmlstarlet:

1.3.1
compiled against libxml2 2.7.6, linked with 20706
compiled against libxslt 1.1.26, linked with 10126
我将收到:

Line 1
  Line 2 nd so on
注释“和”转换为“无”。我想这不是xmlstarlet的问题,而是libxslt的一些变化

有没有办法解决这个问题

更新


增加了将字母“a”转换为零的问题。

我不知道xmlstarlet,但您可以尝试:

我写了所有这些,从解析器到查询引擎,所以它没有依赖性,在所有系统上的行为都是一样的

和#xa仅在XPath表达式本身位于XML文件(如XSLT样式表)中时表示换行符。我怀疑这里发生的是当你说

translate(message,'&#xa;' ,'@')
在命令行上,
”
;'被视为一个五个字符的字符串,因此您告诉
translate
@
替换
&
,并替换所有
#
x
a
没有任何内容

使用ctrl-V尝试文字换行

xml sel -t -m //entry -v "translate(message,'<ctrl-V><CR>' ,'@')" log.xml
xmlsel-t-m//entry-v“translate(message,,'@')”log.xml

(即,键入命令时按ctrl-V键,然后按回车键-它将在屏幕上显示为
^M
)。

您可以通过定义一个包含换行符值的变量来解决此问题:

--var linebreak -n --break 
然后将该变量用作translate函数的第二个参数:

xml sel -t -m //entry
        --var linebreak -n --break
        -v "translate(message, \$linebreak ,'@')"
        log.xml

可能相关。@EeroHelenius不确定这是否是同一个问题:(不确定,但可能行尾与您预期的不同:您是对的- ;被解释为5个字符。您提出的解决方案不是这样的working@dimba我会用一个变量来支持Pablo的答案。不会翻译(消息“\n”,”)
规范化空格(消息)
够了吗?
--var linebreak -n --break 
xml sel -t -m //entry
        --var linebreak -n --break
        -v "translate(message, \$linebreak ,'@')"
        log.xml