当前位置:  开发笔记 > 后端 > 正文

你能保留XML中的前导和尾随空格吗?

如何解决《你能保留XML中的前导和尾随空格吗?》经验,为你挑选了1个好方法。

如何告诉XML解析器尊重前导和尾随空格?

Dim xml: Set xml = CreateObject("MSXML2.DOMDocument")
xml.async = False
xml.loadxml "1 2"
wscript.echo len(xml.documentelement.text)

上面印有3个.

Dim xml: Set xml = CreateObject("MSXML2.DOMDocument")
xml.async = False
xml.loadxml " 2"
wscript.echo len(xml.documentelement.text)

上面打印出来1.(我想打印2).

有什么特别的东西我可以放在xml文档本身告诉解析器在文档中保持前导和尾随空格吗?

澄清1:是否有一个属性可以在文档的开头定义为适用于所有元素?

澄清2:因为实体的内容可能有unicode数据,但xml文件需要是简单的ascii,所有实体都是编码的 - 这意味着CDATA不可用.



1> Dimitre Nova..:

正如我评论的那样,所有推荐使用的答案xml:space="preserve"都是错误的.

xml:space属性只能用于控制仅空白节点的处理,即完全由空白字符组成的文本节点.

对于当前的问题,情况并非如此.

实际上,下面提供的代码正确地获得了包含在以下内容中的文本节点的长度2:

 2

这是正确获取文本节点长度的VB代码(不要忘记添加对"Microsoft XML,v 3.0"的引用):

Dim xml As MSXML2.DOMDocument
Private Sub Form_Load()
Set xml = CreateObject("MSXML2.DOMDocument")
xml.async = False
xml.loadxml " 2"
Dim n
n = Len(xml.documentelement.selectSingleNode("text()").nodeValue)
wscript.echo Len(n)
End Sub

如果你在行上放置一个断点:

wscript.echo Len(n)

你会看到,当调试器在那里中断时,值为n2,因为它是必需的.

因此,此代码是正在寻求的解决方案.


@michaelpryor:更确切地说,对orig的答案.Q值.是:"不,没有特别需要放在XML文档中,因为解析器不会修剪任何非空白文本节点.只需使用"nodeValue"属性,不要使用"text"属性.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有