Моя цель - извлечь определенные узлы из нескольких файлов xml с несколькими пространствами имен с помощью XPath. Все работает нормально, пока я знаю URI пространства имен. Само имя пространства имен остается постоянным, но схемы (XSD) иногда создаются клиентом, т.е. мне неизвестны. Тогда у меня остается три варианта:
используйте только одну схему для пространства имен, надеясь, что ничего не пойдет не так (могу ли я быть уверен?)
получите дочерние узлы документа и найдите первый узел с URI пространства имен, надеясь, что он там, и просто используйте URI, надеясь, что он правильный. может пойти не так по нескольким причинам
как-то сказать xpath: «послушайте, мне плевать на пространства имен, просто найдите ВСЕ узлы с этим именем, я могу даже сказать вам имя пространства имен, только не URI». И вот в чем вопрос ...
Это не повторение многочисленных вопросов типа «мое выражение xpath не работает, потому что я не знаю об осведомленности о пространстве имен», которые можно найти здесь или здесь . Я знаю, как использовать осведомленность о пространстве имен. Только не как от этого избавиться.
источник
Ответы:
Вы можете использовать
local-name()
функцию XPath. Вместо выбора узла вродевы можете выбрать все узлы и отфильтровать узел с правильным локальным именем:
источник
local-name()
для ссылки на атрибуты, не зная о пространстве имен, см .: stackoverflow.com/q/21239181/274677Вы можете сделать то же самое в XPath2.0 с менее подробным синтаксисом:
источник
Вы можете использовать Namespace = false в XmlTextReader
с участием :
источник
'The 'xmlns' attribute is bound to the reserved namespace
ошибки.Или вы можете использовать name ():
Или только поисковые атрибуты:
Если вы открываете xml как объект powershell, он игнорирует пространства имен:
источник
Это мой пример в Qt C ++. Qt поддерживает XPath 2.0:
Вывод программы:
"1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5\n"
Plane.dae
источник