2012-01-11 28 views
1

我是一个新手,XML和我有一个XML文档(这我不能编辑,因为它来自其他地方),但它有这样一个根节点:为什么我不能使用xpath来解析默认命名空间中的节点?

<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使用的命名空间吗?

+0

嗯,我发现,如果我编辑的XML文件并将xmlns属性更改为xmlns:x =“http://schemas.mycomp.com/product/settings”,则文档解析得很好。我想这是与在默认命名空间中导致我的问题的元素有关... – Benj 2012-01-11 11:22:41

+0

不要忘记在您的XPath表达式中包含x:在这种情况下。 /x:元素仍然会匹配,而/ Element会匹配两个东西:带有默认命名空间和没有命名空间。 – 2013-07-03 11:41:04

回答

2

从微软:此行为是设计...

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

与命名空间使用前缀时,你指定SelectionNamespaces财产

+0

是的,我担心是这样。可悲的是,如果您需要解析某人的XML,但不是一个好的答案:-( – Benj 2012-01-11 13:20:15

相关问题