你好,
我想,这是一个非常愚蠢的问题,但我最近不得不切换到 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(...) 调用失败了,但是:
如果我删除 namespace 声明并且元素如下所示:
<factor>1000</factor>
调用完美!
我真的不明白,为什么在设置命名空间声明时 loadXML 函数不解析字符串。
感谢任何帮助!!!!!! :)
谢谢!
最佳答案
问题
字符串
<myns:factor>1000</myns:factor>
不是格式正确的 XML(关于命名空间)。这就是 XML 解析器通常不会加载它的原因。
它的格式不正确,因为它使用了尚未声明的命名空间前缀“myns”。
解决方案
如果您将 XML 更改为类似这样的内容,它会很好地解析:
<myns:factor xmlns:myns="mynamespaceURI">1000</myns:factor>
命名空间声明 (xmlns:myns="mynamespaceURI"
) 可以在使用命名空间前缀的元素或其任何祖先上进行。
如果您不能更改输入的 XML,我会问 XML 的供应商,“你们为什么要给我损坏的 XML?”
关于c++ - MSXML loadXML 不会加载带有命名空间前缀的元素...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7598476/