0

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

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

我知道通常空格由 XML 解析器规范化——正如标准所要求的那样(用空格字符替换所有空格,融合多个空格字符,剥离前导和尾随空格字符)。

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

  • 我可以使用不同的libxml2功能来解析保留空格的 XML 属性吗?
  • 是否有任何DTD模式方法可以让libxml2做到这一点?目前我不使用这些。
4

2 回答 2

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 和正文,但您可能会在应用程序的解析后丢失它们)。

于 2013-01-25T11:44:39.207 回答
0

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

<para xml:space="preserve">

看 :

  1. xmlNodeGetSpacePreserve() @LibXML 文档
  2. XML 保留空白
  3. 空白@ MSDN
于 2013-01-25T14:14:03.607 回答