HIHO,
我猜,这是一个非常愚蠢的问题,但我最近不得不切换到C / C ++并且多年来都没有这样做。 现在我坚持以下几点:将XML元素指定为一个简单的字符串:
<myns:factor>1000</myns:factor>
我必须解析字符串,将结果元素添加到同一命名空间中的周围MSXML2 DOM对象。
现在我这样试试:
HRESULT hr;
MSXML2::IXMLDOMDocument2Ptr l_xmlFrame;
MSXML2::IXMLDOMElementPtr l_xmlFrameDoc;
hr = l_xmlFrame.CreateInstance(__uuidof(MSXML2::DOMDocument));
if( !FAILED(hr) ) {
l_xmlFrame->async = VARIANT_FALSE;
l_xmlFrame->validateOnParse = VARIANT_TRUE;
// p_strUnit holds the xml as a String
l_xmlFrame->loadXML(p_strUnit);
}
loadXML(...)调用失败,但是:
如果我删除名称空间声明,该元素如下所示:
<factor>1000</factor>
通话 完美 !
我真的不明白,为什么loadXML函数在设置Namespace声明时不会解析字符串。
任何帮助表示赞赏!!!!! :)
谢谢!
答案 0 :(得分:3)
字符串
<myns:factor>1000</myns:factor>
不是格式良好的XML(关于命名空间)。这就是为什么XML解析器通常不会加载它。
它的格式不正确,因为它使用了尚未声明的名称空间前缀“myns”。
如果您将XML更改为类似的内容,则可以解析:
<myns:factor xmlns:myns="mynamespaceURI">1000</myns:factor>
名称空间声明(xmlns:myns="mynamespaceURI"
)可以在使用名称空间前缀的元素或其任何祖先上进行。
如果您无法更改输入XML,我会询问XML的供应商,“您为什么要给我破碎的XML?”