【问题标题】:VB6 MSXML2 DOMDocument .xml Property appends NewLine characterVB6 MSXML2 DOMDocument .xml 属性追加换行符
【发布时间】:2011-11-23 14:53:18
【问题描述】:

我有一个使用 msxml4.dll 的旧版 VB 6 应用程序需要维护。

它使用 MSXML2.DOMDocument 的 .loadXML 方法从 xml 字符串创建,然后使用 .xml 属性输出 xml 字符串:

Dim doc As MSXML2.DOMDocument
Set doc = CreateObject("MSXML2.DOMDocument.4.0")
Call doc.loadXML("<doc/>")

' ... manipulation of doc ...

Dim xml As String
xml = doc.xml

我发现 .xml 属性存在问题。使用上述代码时,字符串 xml 末尾有一个 NewLine:

我怎样才能阻止这种情况发生?

如果它无法停止(即,如果它是 MSXML 中的错误或设计上的错误),那么如何在 VB 6 中将其删除? Trim(xml) 不起作用

编辑我已经更新了问题,因为它是 .xml 属性而不是 .loadXML 方法,这似乎有问题。如果我选择文档作为元素:

Dim elm As MSXML2.IXMLDOMElement
Set elm = doc.selectSingleNode("doc")
xml = elm.xml

然后 .xml 属性按预期运行,没有添加新行字符,因此它看起来是特定于 DOMDocument.xml 属性的。

编辑 2: 按照 SpectralGhost 的回答,我最终使用的是:

If Right(xml, Len(vbNewLine)) = vbNewLine Then
    xml = Left(xml, Len(xml) - Len(vbNewLine))
End If

我使用 vbNewLine 来避免特定于平台的问题。

【问题讨论】:

    标签: xml vb6 msxml


    【解决方案1】:

    这看起来有效。

    IF RIGHT(xml,2)=vbCrLf THEN
       xml=LEFT(xml,LEN(xml)-2)
    END IF
    

    【讨论】:

    • 是的,这是我的选择之一。我最终选择了xml = Replace(xml, vbNewLine, "")
    • 如果字符串中的其他地方有换行符,我没有走那条路。
    • 确实,当我在代码库的其余部分应用此更改时,我发现了同样的情况 - 我已经用我最后使用的格式化版本更新了我的 Q!
    【解决方案2】:

    XML 本身会忽略/折叠空格,因此对于解析器来说这不是问题。如果您真的想摆脱尾随的 CRLF,可以尝试设置 doc.preserveWhiteSpace = true

    【讨论】:

    • preserveWhiteSpace = true 无效 - crlf 仍然存在。 AIUI preserveWhiteSpace 仅指正在加载的内容中的空白(在这种情况下,"&lt;doc/&gt;" 字符串中没有空白),而不是输出。
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2021-12-14
    相关资源
    最近更新 更多