xmllint:如何将UTF-8数值引用转换为字符

6

我想将xmllint输出中的UTF-8数字引用转换为字符。

复现步骤:

$ wget http://il.srgssr.ch/integrationlayer/1.0/ue/rts/video/play/4727630.xml
$ xmllint --xpath "/Video/AssetMetadatas/AssetMetadata/title/text()" 4727630.xml && echo
Le jardin apprivoisé - Entre pierre et bois

我希望输出结果为:
Le jardin apprivoisé - Entre pierre et bois

我已阅读了man页面并尝试了不同的选项,但仍未能成功。
如果可能的话,我希望通过使用xmllint的选项来实现这一点,或者如果这不可能,使用另一个在Linux发行版中普遍找到的命令行工具。
谢谢!
4个回答

7

我知道这个问题有点过时,但是我从谷歌来到这里并想为未来的访问者分享可能的答案。 需要稍微更改xpath表达式,并使用string()函数而不是text():

$ wget http://il.srgssr.ch/integrationlayer/1.0/ue/rts/video/play/4727630.xml
$ xmllint --xpath "string(/Video/AssetMetadatas/AssetMetadata/title)" 4727630.xml
Le jardin apprivoisé - Entre pierre et bois

谢谢。这非常有用! - momobo
太棒了,这也解决了我的问题,之前已经让我头疼了一阵!谢谢! - scholt

1
我发现另一种方法可以完全解决这个问题。诀窍是使用GNU提供的recode库将输出编码从html更改为utf8
$ wget http://il.srgssr.ch/integrationlayer/1.0/ue/rts/video/play/4727630.xml
$ xmllint --xpath "/Video/AssetMetadatas/AssetMetadata/title/text()" 4727630.xml | recode html..utf8
Le jardin apprivoisé - Entre pierre et bois
可以使用apt-get install recode安装recode

0

我正在使用xmllint来处理非有效的HTML5代码块,其中我没有在head中声明charset属性。因此,我使用cat动态添加必要的行,以使xmllint能够正确处理UTF8输入并将其作为UTF8输出:

echo '<meta charset="utf8">' | cat - fileWriteInUTF8.chunk | \
     xmllint --html --xpath 'string(//video/source/@src)' 2>/dev/null -

fileWriteInUTF8.chunk中的HTML5内容:

<video>
 <source src="/path/to/content_with_accent-éàü.mp4">
</video>

cat 命令执行后的输出:

<meta charset="utf8">
<video>
 <source src="/path/to/content-with_accent-éàü.mp4">
</video>

我正在使用2>/dev/null来丢弃HTML无效警告消息,请小心使用!

我知道这是一个不太好的解决方案,但实际上我找不到更好的方法。


-2

那么好用的sed和echo怎么样?

$ wget http://il.srgssr.ch/integrationlayer/1.0/ue/rts/video/play/4727630.xml
$ echo -e $(xmllint --xpath "/Video/AssetMetadatas/AssetMetadata/title/text()" 4727630.xml | sed -e 's/&#x/\\u/g' -e 's/;//g')
Le jardin apprivoisé - Entre pierre et bois

1
您提供的解决方案并不完美,而且该问题已经在6.4年前得到了一个不错的答案。不清楚您的解决方案如何改进之前的解决方案。如果您能解释一下为什么您的解决方案比之前的更好,那将非常有用。 - Kurtis Rader
如果您有新的问题,请通过单击提问按钮来提出。如果它有助于提供上下文,请包含此问题的链接。 - M123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接