В большинстве реализаций XPath эта проблема решается путем регистрации URI пространства имен с произвольным префиксом на языке хоста, но я не вижу никакой информации, связанной с этим, в XMLSearch
документах (иGoogle тоже не сильно помогает).
Тем временем должен помочь следующий обход:
//*[local-name()='Image']
Это выбирает image
элементов из любого (или без) пространства имен.
Или, более конкретно (как показано в ответе @ Shawn):
//*[local-name()='Image' and namespace-uri()='http://fedex.com/ws/ship/v9']
Обратите внимание, однако, что это было бы совершенно ненужным, учитывая некоторый способ регистрации пространства имен с помощью механизма XPath,Например, рассмотрим полный пример Java:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("workbook.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
NamespaceContext ctx = new NamespaceContext() {
public String getNamespaceURI(String prefix) {
if ("myName".equals(prefix)) {
return "http://fedex.com/ws/ship/v9";
}
return null;
}
public String getPrefix(String uri) {
throw new UnsupportedOperationException();
}
public Iterator getPrefixes(String uri) {
throw new UnsupportedOperationException();
}
};
xpath.setNamespaceContext(ctx);
XPathExpression expr = xpath.compile("//myName:Image");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("[" + nodes.item(i).getTextContent() + "]");
}
Вывод:
[HUGE STUFF!!!]
Этот код связывает префикс myName
с URI пространства имен http://fedex.com/ws/ship/v9
.Последующие выражения могут ссылаться на узлы в этом пространстве имен с использованием произвольно выбранного префиксного имени:
//myName:Image
Можно предположить, что ColdFusion поддерживает аналогичные функции, но я не смог найти его в документации.Однако если такой функциональности не существует, то это ограничение для ColdFusion .В частности, это не имеет ничего общего с самим XPath или , где в исходном документе появляется объявление пространства имен.