使用libxml2读取属性值时如何保留空格

时间:2013-01-25 10:49:45

标签: xml schema whitespace dtd libxml2

我使用 libxml2 来解析我的XML配置文件。最新的功能请求涉及“正确处理有意义的空白”,例如应该保留换行符。

目前,我使用xmlGetProp获取属性值。

我知道XML解析器通常会对空格进行规范化 - 正如标准所要求的那样(用空格char替换所有空格,融合多个空格字符,去掉前导和尾随空格字符)。

我想知道是否有一种方法可以确保保留属性中的嵌入换行符。

  • 我可以使用不同的 libxml2 功能来解析保留空格的XML属性吗?
  • 是否有 DTD 架构方式让 libxml2 这样做?目前我不使用这些。

2 个答案:

答案 0 :(得分:0)

正如您所知,这是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和正文已添加,但在应用程序中解析后可能会丢失它们。)

答案 1 :(得分:0)

您是否尝试过xml:space属性或xmlNodeGetSpacePreserve()

  

<para xml:space="preserve">

见:

  1. xmlNodeGetSpacePreserve() @ LibXML documentation;
  2. XML to preserve the whitespace;
  3. White Space @ MSDN