gpt4 book ai didi

c++ - MSXML loadXML 不会加载带有命名空间前缀的元素...为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:31 27 4
gpt4 key购买 nike

你好,

我想,这是一个非常愚蠢的问题,但我最近不得不切换到 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com