c++ - 为什么我不能使用 xpath 来解析默认 namespace 中的节点?

标签 c++ xml msxml

我是一个 XML 新手,我有一个 XML 文档(我无法编辑它,因为它来自其他地方)但是它有一个像这样的根节点:

<Configuration xmlns="http://schemas.mycomp.com/product/settings" version="2.0.0">

我正在尝试使用 msxml 和 xpath 解析此文档,如果删除 xmlns 属性,我已经成功完成了。出于某种原因,有了这个 xmlns 属性,文档将无法解析。我尝试设置 msxml 解析以使用以下方法识别文档:

m_pXMLDoc->setProperty( _bstr_t(L"AllowDocumentFunction"), _variant_t(true));   
m_pXMLDoc->setProperty( _bstr_t(L"AllowXsltScript"), _variant_t(true));
m_pXMLDoc->setProperty( _bstr_t(L"SelectionLanguage"), _variant_t(L"XPath"));   
m_pXMLDoc->setProperty( _bstr_t(L"SelectionNamespaces"), _variant_t(L"xmlns='http://schemas.mycomp.com/product/settings'"));

m_pXMLDoc->preserveWhiteSpace = VARIANT_FALSE;
m_pXMLDoc->resolveExternals = VARIANT_TRUE; 
m_pXMLDoc->validateOnParse = VARIANT_FALSE;

从周围阅读来看,xpath 似乎只适用于“无名”命名空间,并且本文档设置了默认命名空间,因此它不再是“无名”。我可以使用 MSXML 设置 xpath 使用的命名空间吗?

最佳答案

来自 Microsoft:此行为是设计使然......

参见 http://support.microsoft.com/kb/288147

在指定 SelectionNamespaces 属性时使用命名空间前缀

关于c++ - 为什么我不能使用 xpath 来解析默认 namespace 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818045/

相关文章:

xml - 使用 VBScript 遍历 XML 文件中的所有节点

delphi - Delphi 的 TXMLDocument 如何决定使用哪个 MS XML 版本(3.0、6.0 甚至 4.0)?

c++ - 在 C++ 中重载二元关系运算符的正确方法

c++ - 如何将 std::string 转换为 LPCSTR?

c++ - 在更高版本的visual studio中运行vs2005 c++项目

c++ - printf中的C语言计算

c# - 您可以为日期时间的 XmlSerialization 指定格式吗?

java - 如何在android xml文件和java文件中显示/隐藏TextView?

java.lang.ClassCastException : GridLayout. LayoutParams 无法转换为 Frame.LayoutParams

Msxml3 - 内存泄漏