Да, я могу подтвердить, что этот тип xpath expression
не поддерживается в xerces 3.1.1
.
В качестве примера, скажем, ваш XML
выглядит как ...
<Root><Item>ABCD</Item><Item>EFGH</Item></Root>
... тогда следующий код выводит значение узлов Item
:
DOMElement * lXMLDocumentElement(lXMLDocument->getDocumentElement());
if ( lXMLDocumentElement )
{
try
{
DOMXPathResult * r(
lXMLDocument->evaluate(L"Item", lXMLDocumentElement, NULL, DOMXPathResult::ORDERED_NODE_SNAPSHOT_TYPE, NULL));
if ( r )
{
for ( unsigned c(0); c < r->getSnapshotLength(); ++c )
{
r->snapshotItem(c);
DOMNode * n(r->getNodeValue());
if ( n->getNodeType() == DOMNode::ELEMENT_NODE )
{
DOMElement * e(static_cast<DOMElement *>(n));
std::wcout << e->getTextContent() << std::endl;
}
}
}
}
catch ( const DOMXPathException & e )
{
// handle exception
}
}
однако, когда XML
выглядит как
<Root><Project index="1">ABCD</Project><Project>EFGH</Project></Root>
и xpath expression
//Project[@index="1"]
используется, генерируется исключение с кодом INVALID_EXPRESSION_ERR
, поэтому выражение не поддерживается.
Стоит также отметить, что метод evaluate()
поддерживает только следующие значения параметра type
(см. DOMXPathResultImpl.cpp
)
ANY_UNORDERED_NODE_TYPE
FIRST_ORDERED_NODE_TYPE
UNORDERED_NODE_SNAPSHOT_TYPE
ORDERED_NODE_SNAPSHOT_TYPE