Tomalek и ckarras дают хорошие ответы, но я хочу уточнить причины, стоящие за ними.
Элементы, которые вы не сопоставляете, находятся в пространстве имен по умолчанию области, в которой они находятся в документе, то есть они находятся в пространстве имен, объявленном для этой области без префикса (например,
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
на элементе Workbook
). Хотя у тэгов нет префикса пространства имен, они находятся в пространстве имен.
Однако XPath требует, чтобы все имена элементов в пространстве имен были указаны с префиксом или чтобы пространство имен было явно указано с помощью namespace-uri()
в предикате. Следовательно, вы должны либо использовать функцию local-name()
в предикате для сопоставления имени элемента (и также использовать функцию namespace-uri()
, если существует опасность столкновения имен в пространствах имен), либо вы должны объявить каждое пространство имен, в котором вы хотите сопоставить элементы в XPath с префиксом и квалифицировать имена элементов с их префиксами пространства имен в выражениях XPath.