2011-11-23 2 views
1

msxml4.dll을 사용하는 기존 VB6 응용 프로그램을 유지 관리하고 있습니다.VB6 MSXML2 DOMDocument .xml 속성이 NewLine 문자를 추가합니다.

그것은 XML 문자열에서 만들 MSXML2.DOMDocument의 .loadXML 방법을 사용하고 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은 마지막에 개행이 있습니다

enter image description here

어떻게 이런 일이 발생 중지 할 수 있습니다?

중지 할 수없는 경우 (즉, MSXML 또는 설계상의 버그 인 경우) VB 6에서이를 어떻게 제거 할 수 있습니까? 그것이 잘못 될 나타나는 .XML 재산권하지 .loadXML 방법을 IT로 Trim(xml) 내가 질문을 업데이트 한

편집 작동하지 않습니다. 내가 요소로 문서를 선택한 경우 :

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

첨가하지 개행 문자로 예상대로 .XML 속성 행위를, 그래서이 나타납니다 그것은 DOMDocument.xml 속성에 따라 다릅니다.

편집 2 :

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

내가 vbNewLine 플랫폼 특정 문제를 방지하기 위해 사용
SpectralGhost의 대답에 따라, 여기 내가 사용 결국 것입니다.

답변

2

마치 작동하는 것 같습니다.

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

네, 그건 제 선택 사항 중 하나였습니다. "xml = Replace (xml, vbNewLine," ") – Shevek

+0

문자열에 개행 문자가있는 경우 해당 경로를 사용하지 않았습니다. – UnhandledExcepSean

+0

실제로 코드베이스의 나머지 부분에이 변경 사항을 적용 할 때 동일한 것을 발견했습니다. 결국 Q를 최종 버전의 형식화 된 버전으로 업데이트했습니다! – Shevek

0

XML 자체는 공백을 무시하거나 붕괴하므로 파서에서는 문제가되지 않습니다. 실제로 후행 CRLF를 제거하려면 doc.preserveWhiteSpace = true을 설정하십시오.

+0

는'preserveWhiteSpace = TRUE '이 적용되지 않습니다 - CRLF가 아직도있다. AIUI preserveWhiteSpace는로드되는 내용의 공백만을 나타냅니다 (이 경우에는 출력이 아닌' ""문자열에 없음). – Shevek