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

标签 c++ c xml visual-studio msxml

你好,

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

相关文章:

C++ 将字符串复制到 Char 字符串数组

c++ - 反向迭代 2 个循环?

c++ - 如何将我的程序转换为使用 C++ 命名空间?

c++ - 类型 "incompatible types when assigning to type ‘char[100]’ 的错误消息 ‘char *’“

xml - 如何从多对多字段中删除 "Search more... "选项?

java - 使用同一对象将不同级别记录到不同文件

c++ - setWindowFlag(Qt::Dialog | Qt::WindowStaysOnTopHint) 不适用于 Centos

c - 如何解析 glib 字符串 (gchar *) 中的整数?

c - frama-c生成的pdgs中的圆节点是什么意思

java - Apache Santuario 签名元素位置