Почему я не могу использовать xpath для анализа узлов в пространстве имен по умолчанию? - PullRequest
1 голос
/ 11 января 2012

Я новичок в 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 работает только в пространстве имен «без имени», и этот документ устанавливает пространство имен по умолчанию, так что оно больше не «без имени». Могу ли я установить пространство имен, которое xpath использует с помощью MSXML?

1 Ответ

2 голосов
/ 11 января 2012

От Microsoft: это поведение является намеренным ...

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

Используйте префиксы с пространствами имен при указании свойства SelectionNamespaces

...