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