/*[local-name()='catalog']
- это решение вашего вопроса.
Но почему вы хотите игнорировать пространства имен? Они были введены, чтобы выразить что-то, например, различать разные типы каталогов. С помощью вашего запроса вы теперь можете выбрать содержимое любого каталога в мире, но я предполагаю, что вы можете обрабатывать только книги. Что произойдет, если вместо этого вы получите каталог винтов или автомобилей?
Упомянутое в префиксе (xsi) верно. Если вы удалите префикс, все элементы будут в этом пространстве имен (тогда это называется пространством имен по умолчанию). Но вы все равно можете с этим справиться.
В любом случае в своем коде дайте пространству имен префикс. Он даже не должен совпадать с оригинальным префиксом:
XML.setProperty('SelectionNamespaces', "xmlns:xyz='http://www.w3.org/2001/XMLSchema-instance'");
Второе - адаптировать запрос XPath. Тогда должно быть
/xyz:catalog
Оригинальный XML только объявляет пространство имен xsi, но никогда не использует его. В этом случае вы можете удалить его полностью. Если вы хотите использовать пространство имен и хотите, чтобы оно содержало префиксы, то переписайте свой XML в
<?xml version="1.0"?>
<xsi:catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<xsi:book id="bk101">
<xsi:author>Gambardella, Matthew</xsi:author>
<xsi:title>XML Developer's Guide</xsi:title>
<xsi:genre>Computer</xsi:genre>
<xsi:price>44.95</xsi:price>
<xsi:publish_date>2000-10-01</xsi:publish_date>
<xsi:description>An in-depth look at creating applications with
XML.</xsi:description>
</xsi:book>
</xsi:catalog>