2010-02-10 1 views
1

MSXML4를 사용하여 XML 파일을 작성하려고합니다. 보존해야하는 후미 공백이있는 데이터 요소가있는 경우를 제외하고는 정상적으로 작동합니다.후행 공백을 제거하는 XML

새로운 요소를 삽입하려면 다음 코드를 감안할 때 : 나는 "pNewChild-> 텍스트"를 선택하면 텍스트가 여전히 후행 공백이 포함

const _bstr_t k_Parent  (ToBSTR("ParentNode")); 
const _bstr_t k_Child  (ToBSTR("ChildNode")); 
const _bstr_t k_Data  (ToBSTR("DataWithTrailingSpace ")); 
const _bstr_t k_Namespace (ToBSTR("TheNameSpace")); 

MSXML2::IXMLDOMDocument2Ptr m_pXmlDoc; 

m_pXmlDoc->async = VARIANT_FALSE; 
m_pXmlDoc->validateOnParse = VARIANT_FALSE; 
m_pXmlDoc->resolveExternals = VARIANT_FALSE; 
m_pXmlDoc->preserveWhiteSpace = VARIANT_TRUE; 

MSXML2::IXMLDOMNodePtr pElement = m_pXmlDoc->createNode(NODE_ELEMENT, k_Child, k_Namespace); 
MSXML2::IXMLDOMNodePtr pParent = m_pXmlDoc->selectSingleNode(k_Parent); 

pElement->put_text (k_Data); 

MSXML2::IXMLDOMNodePtr pNewChild = pParent->appendChild(pElement); 

합니다.

std::string xml (static_cast<std::string>(m_pXmlDoc->xml)); 

std::ofstream file("output.xml"); 

file << xml << std::endl; 

file.flush(); 
file.close(); 

출력은 다음과 같습니다 :

대신 ("DataWithTrailingSpace"뒤에 여분의 공간에주의)의
<ParentNode> 
    <ChildNode>DataWithTrailingSpace</ChildNode> 
</ParentNode> 

: 할 수 없습니다

<ParentNode> 
    <ChildNode>DataWithTrailingSpace </ChildNode> 
</ParentNode> 

그림 I는 파일에 기록 할 때 어떤 지점에서 후행 공간이 벗겨지고 있습니다.

누군가이 문제가 발생할 수있는 곳과 해결 방법에 대해 통찰력을 주시기 바랍니다.

답변

0

수수께끼가 풀렸다. Internet Explorer에서 XML을 미리 보지 마십시오. 후행 공백을 숨 깁니다. 메모장을 대신 사용하십시오.

1

당신이 다음 createCDATASection() 등을 통해 CDATA 섹션을 사용한다 공백을 보존해야하는 경우.

+0

이 공간은 공간을 보존하지만 " DataWithTrailingSpace"이어야합니다. – TERACytE

+0

그러면 수신 시스템 __은 XML__을 지원하지 않습니다. XML에서 " DataWithTrailingSpace"은 정확히 일치합니다 "" – MSalters