2020-02-17 22:17:06 +01:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html > < head > < meta http-equiv = "Content-Type" content = "text/html;charset=iso-8859-1" >
< title > XQilla DOM3 API Documentation< / title >
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" >
< / head > < body >
< a style = "float:right;" href = "http://sourceforge.net/projects/xqilla" > < img src = "http://sflogo.sourceforge.net/sflogo.php?group_id=152021&type=2" border = "0" alt = "SourceForge.net Logo" / > < / a >
2020-02-17 22:23:16 +01:00
<!-- Generated by Doxygen 1.6.1 -->
< div class = "navigation" id = "top" >
< div class = "tabs" >
< ul >
< li > < a href = "index.html" > < span > Main Page< / span > < / a > < / li >
2020-02-17 22:19:57 +01:00
< li > < a href = "namespaces.html" > < span > Namespaces< / span > < / a > < / li >
< li > < a href = "annotated.html" > < span > Classes< / span > < / a > < / li >
< li > < a href = "files.html" > < span > Files< / span > < / a > < / li >
< li > < a href = "examples.html" > < span > Examples< / span > < / a > < / li >
< / ul >
< / div >
< / div >
< div class = "contents" >
2020-02-17 22:23:16 +01:00
< h1 > dom-resolver.cpp< / h1 > < p > This example shows an example of running multiple queries, using a DOMXPathNSResolver to resolve namespaces.< / p >
2020-02-17 22:17:06 +01:00
< div class = "fragment" > < pre class = "fragment" > < span class = "comment" > /*< / span >
2020-02-17 22:22:42 +01:00
< span class = "comment" > * Copyright (c) 2001, 2008,< / span >
2020-02-17 22:17:06 +01:00
< span class = "comment" > * DecisionSoft Limited. All rights reserved.< / span >
2020-02-17 22:23:16 +01:00
< span class = "comment" > * Copyright (c) 2004, 2015 Oracle and/or its affiliates. All rights reserved.< / span >
< span class = "comment" > * < / span >
2020-02-17 22:17:06 +01:00
< span class = "comment" > *< / span >
2020-02-17 22:19:57 +01:00
< span class = "comment" > * Licensed under the Apache License, Version 2.0 (the " License" );< / span >
2020-02-17 22:17:06 +01:00
< span class = "comment" > * you may not use this file except in compliance with the License.< / span >
< span class = "comment" > * You may obtain a copy of the License at< / span >
< span class = "comment" > *< / span >
< span class = "comment" > * http://www.apache.org/licenses/LICENSE-2.0< / span >
< span class = "comment" > *< / span >
< span class = "comment" > * Unless required by applicable law or agreed to in writing, software< / span >
2020-02-17 22:19:57 +01:00
< span class = "comment" > * distributed under the License is distributed on an " AS IS" BASIS,< / span >
2020-02-17 22:17:06 +01:00
< span class = "comment" > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.< / span >
< span class = "comment" > * See the License for the specific language governing permissions and< / span >
< span class = "comment" > * limitations under the License.< / span >
< span class = "comment" > */< / span >
< span class = "preprocessor" > #include < iostream> < / span >
< span class = "preprocessor" > #include < < a class = "code" href = "DOM_8hpp.html" > xercesc/dom/DOM.hpp< / a > > < / span >
< span class = "preprocessor" > #include < xercesc/framework/StdOutFormatTarget.hpp> < / span >
< span class = "preprocessor" > #include < < a class = "code" href = "xqilla-dom3_8hpp.html" > xqilla/xqilla-dom3.hpp< / a > > < / span >
XERCES_CPP_NAMESPACE_USE;
2020-02-17 22:19:57 +01:00
< span class = "keyword" > using namespace < / span > std;
2020-02-17 22:17:06 +01:00
< span class = "keywordtype" > int< / span > main(< span class = "keywordtype" > int< / span > argc, < span class = "keywordtype" > char< / span > *argv[])
{
< span class = "keywordflow" > if< / span > (argc != 2) {
2020-02-17 22:19:57 +01:00
cerr < < < span class = "stringliteral" > " Data file not specified." < / span > < < endl;
2020-02-17 22:17:06 +01:00
< span class = "keywordflow" > return< / span > 1;
}
< span class = "comment" > // Initialise XQilla //< / span >
< span class = "comment" > < / span >
< span class = "comment" > // 1. Initialize XQilla< / span >
< span class = "comment" > //< / span >
< span class = "comment" > // Note that this initialisation takes care of initialising< / span >
< span class = "comment" > // xerces-c as well< / span >
< span class = "keywordflow" > try< / span > {
2020-02-17 22:19:57 +01:00
< a name = "a0" > < / a > < a class = "code" href = "classXQillaPlatformUtils.html#ac769d09556ec43ecb94d1822783ba0b8" title = "Perform XQilla initialization." > XQillaPlatformUtils::initialize< / a > ();
2020-02-17 22:17:06 +01:00
} < span class = "keywordflow" > catch< / span > (< span class = "keyword" > const< / span > XMLException& eXerces) {
2020-02-17 22:19:57 +01:00
cerr < < < span class = "stringliteral" > " Error during Xerces-C initialisation.\n" < / span >
< < < span class = "stringliteral" > " Xerces exception message: " < / span >
2020-02-17 22:17:06 +01:00
< < UTF8(eXerces.getMessage()) < < endl;
< span class = "keywordflow" > return< / span > 1;
}
< span class = "keywordflow" > try< / span > {
< span class = "comment" > // 2. Obtain a DOM3 XPath2 implementation. This is a XQilla-specific < / span >
< span class = "comment" > // implementation that overrides the standard DOMDocument, the standard < / span >
< span class = "comment" > // DOMWriter and the standard DOMBuilder< / span >
DOMImplementation* xqillaImplementation =
2020-02-17 22:19:57 +01:00
DOMImplementationRegistry::getDOMImplementation(X(< span class = "stringliteral" > " XPath2 3.0" < / span > ));
2020-02-17 22:17:06 +01:00
2020-02-17 22:23:16 +01:00
< span class = "comment" > // 3. Obtain a parser and set ' do namespaces' , ' use schema' and ' validate' to < / span >
2020-02-17 22:17:06 +01:00
< span class = "comment" > // true.< / span >
< span class = "comment" > // Create a DOMLSParser object< / span >
2020-02-17 22:19:57 +01:00
< a name = "_a1" > < / a > < a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMLSParser> < / a > parser(xqillaImplementation-> createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0));
2020-02-17 22:17:06 +01:00
parser-> getDomConfig()-> setParameter(XMLUni::fgDOMNamespaces, < span class = "keyword" > true< / span > );
parser-> getDomConfig()-> setParameter(XMLUni::fgXercesSchema, < span class = "keyword" > true< / span > );
parser-> getDomConfig()-> setParameter(XMLUni::fgDOMValidateIfSchema, < span class = "keyword" > true< / span > );
< span class = "comment" > // Parse our XML document //< / span >
< span class = "comment" > < / span >
DOMDocument *document = parser-> parseURI(argv[1]);
< span class = "keywordflow" > if< / span > (document == 0) {
2020-02-17 22:19:57 +01:00
cerr < < < span class = "stringliteral" > " Document not found: " < / span > < < argv[1] < < endl;
2020-02-17 22:17:06 +01:00
< span class = "keywordflow" > return< / span > 1;
}
< span class = "comment" > // Create a parsed expression //< / span >
< span class = "comment" > // (compiled) and evaluate it //< / span >
< span class = "comment" > < / span >
< span class = "comment" > // 1. Create a Namespace Resolver. This holds a map of namespace prefixes < / span >
< span class = "comment" > // to namespace URIs.< / span >
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMXPathNSResolver> < / a > resolver(document-> createNSResolver(document-> getDocumentElement()));
2020-02-17 22:19:57 +01:00
resolver-> addNamespaceBinding(X(< span class = "stringliteral" > " my" < / span > ), X(< span class = "stringliteral" > " http://example.com/myURI" < / span > ));
2020-02-17 22:17:06 +01:00
< span class = "comment" > // **************** Example 1: max() function ****************** //< / span >
{
< span class = "comment" > // 2. Create a parsed expression< / span >
2020-02-17 22:19:57 +01:00
< span class = "keyword" > const< / span > < span class = "keywordtype" > char< / span > * expression = < span class = "stringliteral" > " max(/Catalogue/Book/Price)" < / span > ;
2020-02-17 22:17:06 +01:00
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMXPathExpression> < / a > parsedExpression(document-> createExpression(X(expression), resolver));
< span class = "comment" > // 3. Evaluate the expression. We choose to have a first result, since we< / span >
< span class = "comment" > // know the answer will have only one item. Could also choose< / span >
< span class = "comment" > // XPath2Result::SNAPSHOT_RESULT and XPath2Result::ITERATOR_RESULT< / span >
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMXPathResult> < / a > firstResult(parsedExpression-> evaluate(document-> getDocumentElement(), DOMXPathResult::FIRST_RESULT_TYPE, 0));
< span class = "comment" > // 4. Work with the result: output it to the screen in this case< / span >
2020-02-17 22:23:16 +01:00
cout < < < span class = "stringliteral" > " The answer for expression ' " < / span > < < expression < < < span class = "stringliteral" > " ' is: " < / span > < < firstResult-> getNumberValue() < < endl;
2020-02-17 22:17:06 +01:00
}
< span class = "comment" > // **************** Example 2: output of nodes ****************** //< / span >
{
< span class = "comment" > // 2. Create a parsed expression< / span >
2020-02-17 22:19:57 +01:00
< span class = "keyword" > const< / span > < span class = "keywordtype" > char< / span > * expression2 = < span class = "stringliteral" > " //Magazine" < / span > ;
2020-02-17 22:17:06 +01:00
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMXPathExpression> < / a > parsedExpression(document-> createExpression(X(expression2), resolver));
< span class = "comment" > // 3. Evaluate the expression. We choose to have an iterator result< / span >
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMXPathResult> < / a > iteratorResult(parsedExpression-> evaluate(document-> getDocumentElement(), DOMXPathResult::ITERATOR_RESULT_TYPE, 0));
< span class = "comment" > // 4. Work with the result: output it to the screen in this case< / span >
< span class = "comment" > // Create a DOMLSSerializer to output the nodes< / span >
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMLSSerializer> < / a > serializer(xqillaImplementation-> createLSSerializer());
< a class = "code" href = "classAutoRelease.html" > AutoRelease< DOMLSOutput> < / a > output(xqillaImplementation-> createLSOutput());
StdOutFormatTarget target;
output-> setByteStream(& target);
2020-02-17 22:23:16 +01:00
cout < < < span class = "stringliteral" > " The answer for expression ' " < / span > < < expression2 < < < span class = "stringliteral" > " ' is: " < / span > < < endl;
2020-02-17 22:17:06 +01:00
< span class = "keywordtype" > int< / span > i = 0;
< span class = "keywordflow" > while< / span > (iteratorResult-> iterateNext()) {
< span class = "keywordflow" > if< / span > (iteratorResult-> isNode()) {
2020-02-17 22:19:57 +01:00
cout < < < span class = "stringliteral" > " Node " < / span > < < i++ < < < span class = "stringliteral" > " : " < / span > < < flush;
2020-02-17 22:17:06 +01:00
serializer-> write(iteratorResult-> getNodeValue(), output);
cout < < endl;
} < span class = "keywordflow" > else< / span > {
2020-02-17 22:19:57 +01:00
cerr < < < span class = "stringliteral" > " Expected a node but received an atomic value!" < / span > < < endl;
2020-02-17 22:17:06 +01:00
}
}
}
}
< span class = "keywordflow" > catch< / span > (DOMException & e) {
2020-02-17 22:19:57 +01:00
cerr < < < span class = "stringliteral" > " DOMException: " < / span > < < UTF8(e.getMessage()) < < endl;
2020-02-17 22:17:06 +01:00
< span class = "keywordflow" > return< / span > 1;
}
< span class = "comment" > // Terminate //< / span >
< span class = "comment" > < / span >
2020-02-17 22:19:57 +01:00
< a name = "a2" > < / a > < a class = "code" href = "classXQillaPlatformUtils.html#a0bd04a35d4cb26894497c6ff4d8e2105" title = "Perform XQilla termination." > XQillaPlatformUtils::terminate< / a > ();
2020-02-17 22:17:06 +01:00
< span class = "keywordflow" > return< / span > 0;
}
2020-02-17 22:19:57 +01:00
< / pre > < / div > < / div >
2020-02-17 22:23:50 +01:00
< hr size = "1" / > < address style = "text-align: right;" > < small > Generated on 8 Jul 2015 for XQilla DOM Level 3 API by
2020-02-17 22:17:06 +01:00
< a href = "http://www.doxygen.org/index.html" >
2020-02-17 22:23:16 +01:00
< img class = "footer" src = "doxygen.png" alt = "doxygen" / > < / a > 1.6.1 < / small > < / address >
2020-02-17 22:17:06 +01:00
< / body >
< / html >