为什么我不能使用xpath来解析默认命名空间中的节点?

时间:2012-01-11 10:54:37

标签: 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只适用于“no name”命名空间,而且这个文档设置了默认命名空间,因此它不再是“没有名字”。我可以使用MSXML设置xpath使用的命名空间吗?

1 个答案:

答案 0 :(得分:2)

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

请参阅http://support.microsoft.com/kb/288147

指定SelectionNamespaces属性时使用名称空间的前缀