4#include "Stroika/Foundation/StroikaPreComp.h"
8#include "Stroika/Foundation/Execution/Exceptions.h"
9#include "Stroika/Foundation/Memory/Common.h"
12#include "Stroika/Foundation/Streams/MemoryStream.h"
13#include "Stroika/Foundation/Streams/TextToBinary.h"
25using namespace Stroika::Foundation::Debug;
27using namespace Stroika::Foundation::Memory;
28using namespace Stroika::Foundation::DataExchange::XML;
29using namespace Stroika::Foundation::DataExchange::XML::DOM;
30using namespace Stroika::Foundation::DataExchange::XML::DOM::Document;
37XPath::XPathExpressionNotSupported::XPathExpressionNotSupported ()
47String XPath::Expression::Options::ToString ()
const
51 sb <<
"Namespaces: "sv << fNamespaces;
52 if (fResultTypeIndex) {
53 sb <<
", ResultTypeIndex: "sv << fResultTypeIndex;
55 sb <<
", Ordered: "sv << fOrdered;
56 sb <<
", Snapshot: "sv << fSnapshot;
69 XPath::Expression::Options fOptions_;
70 XPathExpRep_ (
String&& e,
const XPath::Expression::Options& o)
71 : fExpression_{move (e)}
79 virtual XPath::Expression::Options
GetOptions ()
const override
85XPath::Expression::Expression (
String&& e,
const Options& o)
86 : fRep_{make_shared<XPathExpRep_> (move (e), o)}
90String XPath::Expression::ToString ()
const
95 sb <<
"expression: "sv << fRep_->GetExpression ();
96 sb <<
", options: "sv << fRep_->GetOptions ();
108 for (
Node::Ptr c : this->GetChildren ()) {
109 static const String kID_ =
"id"s;
111 if (e.GetAttribute (kID_) ==
id) {
124String Node::Ptr::ToString ()
const
126 if (PeekRep () ==
nullptr) {
137 if (c.GetName () == eltName) {
153 fRep_->Validate (schema);
156String Document::Ptr::ToString ()
const
158 if (fRep_ ==
nullptr) {
171Document::Ptr Document::New (
const Providers::IDOMProvider& p)
179 doc.ReplaceRootElement (documentElementName);
190 return Document::Ptr{p.DocumentFactory (in, schemaToValidateAgainstWhileReading)};
195 return New (p, Streams::TextToBinary::Reader::New (in),
nullptr);
200 return New (p, Streams::TextToBinary::Reader::New (in), schemaToValidateAgainstWhileReading);
203Document::Ptr Document::New (
const Providers::IDOMProvider& p,
const Ptr& clone)
211#if qStroika_Foundation_DataExchange_XML_SupportDOM
214 static const XML::Providers::IDOMProvider* kDefaultProvider_ = XML::Providers::kDefaultProvider ();
215 return New (*kDefaultProvider_);
220 static const XML::Providers::IDOMProvider* kDefaultProvider_ = XML::Providers::kDefaultProvider ();
221 return New (*kDefaultProvider_, documentElementName);
226 return New (in,
nullptr);
231 static const XML::Providers::IDOMProvider* kDefaultProvider_ = XML::Providers::kDefaultProvider ();
232 return New (*kDefaultProvider_, in, schema);
237 return New (Streams::TextToBinary::Reader::New (in),
nullptr);
242 return New (Streams::TextToBinary::Reader::New (in), schema);
247 static const XML::Providers::IDOMProvider* kDefaultProvider_ = XML::Providers::kDefaultProvider ();
248 return New (*kDefaultProvider_, clone);
#define RequireNotNull(p)
Similar to String, but intended to more efficiently construct a String. Mutable type (String is large...
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Document::Ptr is create with Document::New, and is a smart pointer to a DOM document object.
nonvirtual void Validate(const Schema::Ptr &schema) const
nonvirtual Ptr GetChild(const NameWithNamespace &eltName) const
Node::Ptr is a smart pointer to a Node::IRep.
nonvirtual String GetExpression() const
nonvirtual Options GetOptions() const
Ptr New(const InputStream::Ptr< byte > &src, optional< AutomaticCodeCvtFlags > codeCvtFlags={}, optional< SeekableFlag > seekable={}, ReadAhead readAhead=eReadAheadAllowed)
Create an InputStream::Ptr<Character> from the arguments (usually binary source) - which can be used ...