Свойство VB6 MSXML2 DOMDocument .xml добавляет символ новой строки

У меня есть устаревшее приложение VB 6, которое использует msxml4.dll.

Он использует метод .loadXML MSXML2.DOMDocument для создания из строк 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 имеет в конце новую строку:

введите здесь описание изображения

Как я могу предотвратить это?

Если это невозможно остановить (т. е. если это ошибка в MSXML или по замыслу), то как я могу удалить ее в VB 6? Trim(xml) не работает

EDIT Я обновил вопрос, так как это свойство .xml, а не метод .loadXML, который, по-видимому, виноват. Если я выберу документ как элемент:

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

то свойство .xml действует, как и ожидалось, без добавления символа новой строки, поэтому кажется, что оно относится к свойству DOMDocument.xml.

EDIT 2: Следуя ответу SpectralGhost, вот что я в итоге использовал:

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

Я использую vbNewLine, чтобы избежать проблем, связанных с платформой.


person Shevek    schedule 23.11.2011    source источник


Ответы (2)


Похоже, это сработало.

IF RIGHT(xml,2)=vbCrLf THEN
   xml=LEFT(xml,LEN(xml)-2)
END IF
person UnhandledExcepSean    schedule 23.11.2011
comment
Да, это был один из моих вариантов. В итоге я пошел с xml = Replace(xml, vbNewLine, "") - person Shevek; 24.11.2011
comment
Я не пошел по этому пути, если где-то в строке была новая строка. - person UnhandledExcepSean; 24.11.2011
comment
Действительно, я обнаружил то же самое, когда применял это изменение к остальной кодовой базе — я обновил свой Q отформатированной версией того, с чем я пошел в конце! - person Shevek; 24.11.2011

Сам XML игнорирует/сворачивает пробелы, так что это не проблема для синтаксического анализатора. Если вы действительно хотите избавиться от завершающего CRLF, попробуйте установить doc.preserveWhiteSpace = true.

person Deanna    schedule 23.11.2011
comment
preserveWhiteSpace = true не действует - crlf все еще там. AIUI saveWhiteSpace относится только к пробелам в том, что загружается (в данном случае их нет в строке "<doc/>"), а не к выводу. - person Shevek; 23.11.2011