我使用libxml2来解析我的 XML 配置文件。最新的功能请求涉及“正确处理有意义的空格”,例如应该保留换行符。
目前我使用xmlGetProp获取属性值。
我知道通常空格由 XML 解析器规范化——正如标准所要求的那样(用空格字符替换所有空格,融合多个空格字符,剥离前导和尾随空格字符)。
我想知道是否有一种方法可以确保保留属性中嵌入的换行符。
- 我可以使用不同的libxml2功能来解析保留空格的 XML 属性吗?
- 是否有任何DTD或模式方法可以让libxml2做到这一点?目前我不使用这些。
我使用libxml2来解析我的 XML 配置文件。最新的功能请求涉及“正确处理有意义的空格”,例如应该保留换行符。
目前我使用xmlGetProp获取属性值。
我知道通常空格由 XML 解析器规范化——正如标准所要求的那样(用空格字符替换所有空格,融合多个空格字符,剥离前导和尾随空格字符)。
我想知道是否有一种方法可以确保保留属性中嵌入的换行符。
正如您所注意到的,这是 XML 规范所要求的,因此 DTD 或 Schema 中无法停止规范化。
不过,您可能可以使用 libxml 的 html 解析器,将其命令行 xmllint 实用程序与输入文件一起使用
<a>
<b x="1
2
3"/>
</a>
我明白了
$ xmllint abc.xml
<?xml version="1.0"?>
<a>
<b x="1 2 3"/>
</a>
所以换行符已经消失了,但是:
$ xmllint --html abc.xml
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><a>
<b x="1
2
3"></b>
</a></body></html>
保留换行符(添加了虚假推断的 html 和正文,但您可能会在应用程序的解析后丢失它们)。