Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
如何在使用libxml2读取属性值时保留空格_Xml_Schema_Whitespace_Dtd_Libxml2 - Fatal编程技术网

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

如何在使用libxml2读取属性值时保留空格,xml,schema,whitespace,dtd,libxml2,Xml,Schema,Whitespace,Dtd,Libxml2,我使用libxml2解析XML配置文件。最新的功能请求涉及“正确处理有意义的空白”,例如,应保留换行符 目前,我使用获取属性值 我知道,通常XML解析器会对空白进行规范化——正如标准所要求的那样(用空格字符替换所有空白,融合多个空格字符,剥离前导和尾随空格字符) 我想知道是否有办法确保保留属性中嵌入的换行符 我可以使用不同的libxml2特性来解析XML属性并保留空格吗 是否有任何DTD或模式方法可以使libxml2做到这一点?目前我不使用这些 正如您所注意到的,这是XML规范所要求的,因此在

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

目前,我使用获取属性值

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

我想知道是否有办法确保保留属性中嵌入的换行符

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

正如您所注意到的,这是XML规范所要求的,因此在DTD或模式中无法停止规范化

不过,您可能可以使用libxml的html解析器,将其命令行xmllint实用程序与

<a>
<b x="1
2
3"/>
</a>

我明白了

$xmllint abc.xml
所以新词已经消失了,但是:

$ 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>
$xmllint--html abc.xml

保留换行符(添加了虚假的推断html和正文,但在应用程序中解析后可能会丢失它们)。

您是否尝试了
xml:space
属性或:

见:

  • )
  • )

  • 嗯,很有意思。不,我没有试过,但还是很有趣。唉,我确实有一个属性,而不是一个包含文本内容(或PCDATA或CDATA)的元素。在我可以将这些可怕的属性升级到包含内容的元素之前,我可能会在属性中放置一个URI,然后加载包含内容的空间,可以说是外部空间。但如果有一个“属性方式”,我可能不会这样做。
    $ 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>