14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/Array.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/ScopedPtr.h"
18#include "arcane/utils/StdHeader.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/OStringStream.h"
21#include "arcane/utils/TraceInfo.h"
22#include "arcane/utils/StringBuilder.h"
23#include "arcane/utils/CheckedConvert.h"
25#include "arcane/core/Dom.h"
26#include "arcane/core/DomUtils.h"
27#include "arcane/core/ISharedReference.h"
28#include "arcane/core/XmlNode.h"
29#include "arcane/core/IXmlDocumentHolder.h"
30#include "arcane/core/XmlException.h"
32#include <libxml/tree.h>
33#include <libxml/parser.h>
34#include <libxml/xmlsave.h>
35#include <libxml/parserInternals.h>
36#include <libxml/xinclude.h>
37#include <libxml/xmlschemas.h>
87static xmlNodePtr impl(NodePrv* p)
91static xmlAttrPtr impl(AttrPrv* p)
95static xmlElementPtr impl(ElementPrv* p)
97 return (xmlElementPtr)p;
99static xmlNamedNodeMapPtr impl(NamedNodeMapPrv* p)
101 return (xmlNamedNodeMapPtr)p;
103static xmlDocPtr impl(DocumentPrv* p)
107static xmlDocTypePtr impl(DocumentTypePrv* p)
109 return (xmlDocTypePtr)p;
115static xmlCharacterDataPtr impl(CharacterDataPrv* p)
117 return (xmlCharacterDataPtr)p;
119static xmlTextPtr impl(TextPrv* p)
121 return (xmlTextPtr)p;
123[[maybe_unused]]
static xmlNodeListPtr impl(NodeListPrv* p)
125 return (xmlNodeListPtr)p;
127static xmlDocumentFragmentPtr impl(DocumentFragmentPrv* p)
129 return (xmlDocumentFragmentPtr)p;
131static xmlCDATAPtr impl(CDATASectionPrv* p)
133 return (xmlCDATAPtr)p;
135static xmlProcessingInstructionPtr impl(ProcessingInstructionPrv* p)
137 return (xmlProcessingInstructionPtr)p;
139static xmlEntityReferencePtr impl(EntityReferencePrv* p)
141 return (xmlEntityReferencePtr)p;
143[[maybe_unused]]
static xmlEntityPtr impl(EntityPrv* p)
145 return (xmlEntityPtr)p;
147[[maybe_unused]]
static xmlNotationPtr impl(NotationPrv* p)
149 return (xmlNotationPtr)p;
154static NodePrv* cvt(xmlNodePtr p)
158static AttrPrv* cvt(xmlAttrPtr p)
162static ElementPrv* cvt(xmlElementPtr p)
164 return (ElementPrv*)p;
166static NamedNodeMapPrv* cvt(xmlNamedNodeMapPtr p)
168 return (NamedNodeMapPrv*)p;
170static DocumentPrv* cvt(xmlDocPtr p)
172 return (DocumentPrv*)p;
174static DocumentTypePrv* cvt(xmlDocTypePtr p)
176 return (DocumentTypePrv*)p;
180 return (ImplementationPrv*)p;
182static CharacterDataPrv* cvt(xmlCharacterDataPtr p)
184 return (CharacterDataPrv*)p;
186static TextPrv* cvt(xmlTextPtr p)
190[[maybe_unused]]
static NodeListPrv* cvt(xmlNodeListPtr p)
192 return (NodeListPrv*)p;
194[[maybe_unused]]
static DocumentFragmentPrv* cvt(xmlDocumentFragmentPtr p)
196 return (DocumentFragmentPrv*)p;
198[[maybe_unused]]
static CommentPrv* cvt(xmlCommentPtr p)
200 return (CommentPrv*)p;
202[[maybe_unused]]
static CDATASectionPrv* cvt(xmlCDATAPtr p)
204 return (CDATASectionPrv*)p;
206static ProcessingInstructionPrv* cvt(xmlProcessingInstructionPtr p)
208 return (ProcessingInstructionPrv*)p;
210[[maybe_unused]]
static EntityReferencePrv* cvt(xmlEntityReferencePtr p)
212 return (EntityReferencePrv*)p;
214static EntityPrv* cvt(xmlEntityPtr p)
216 return (EntityPrv*)p;
218static NotationPrv* cvt(xmlNotationPtr p)
220 return (NotationPrv*)p;
229domStringToXmlChar(
const String& str)
231 const xmlChar* ch =
reinterpret_cast<const xmlChar*
>(str.utf8().data());
236toChar(
const String& value)
238 return domStringToXmlChar(value);
241String fromChar(
const xmlChar* value)
248 return DOMString(bytes);
251String fromCharAndFree(xmlChar* value)
255 String s(fromChar(value));
263NodePrv* toNodePrv(
const Node& node)
274#define TNIE throw NotImplementedException(A_FUNCINFO)
286 return &sDOMImplementation;
301class LibXml2_ErrorHandler
305 LibXml2_ErrorHandler()
309 ~LibXml2_ErrorHandler()
311 ::xmlSetStructuredErrorFunc(
nullptr,
nullptr);
318 static void XMLCDECL
handler(
void* user_data, T* e)
322 auto x =
reinterpret_cast<LibXml2_ErrorHandler*
>(user_data);
330 const String& errorMessage()
const {
return m_error_message; }
338 void addError(
const xmlError* e)
341 if (e->level == XML_ERR_WARNING)
343 else if (e->level == XML_ERR_ERROR)
345 else if (e->level == XML_ERR_FATAL)
366 m_error_message = m_error_message + sb.
toString();
386 : m_file_name(file_name)
391 m_options = XML_PARSE_HUGE;
411 const String& fileName()
const {
return m_file_name; }
412 int options()
const {
return m_options; }
432class LibXml2_SchemaValidator
436 LibXml2_SchemaValidator(
const String& schema_file_name)
437 : m_schema_file_name(schema_file_name)
438 , m_schema_parser_context(
nullptr)
439 , m_schema_ptr(
nullptr)
440 , m_schema_valid_context(
nullptr)
443 ~LibXml2_SchemaValidator()
464 String m_schema_file_name;
465 ::xmlSchemaParserCtxtPtr m_schema_parser_context;
466 ::xmlSchemaPtr m_schema_ptr;
467 ::xmlSchemaValidCtxtPtr m_schema_valid_context;
473 if (m_schema_parser_context) {
474 ::xmlSchemaFreeParserCtxt(m_schema_parser_context);
475 m_schema_parser_context =
nullptr;
478 ::xmlSchemaFree(m_schema_ptr);
479 m_schema_ptr =
nullptr;
481 if (m_schema_valid_context) {
482 ::xmlSchemaFreeValidCtxt(m_schema_valid_context);
483 m_schema_valid_context =
nullptr;
505class LibXml2_MemoryReader
510 LibXml2_MemoryReader(ByteConstSpan buffer)
518 const char* encoding =
nullptr;
519 int options = parser.options();
520 const char* buf_base =
reinterpret_cast<const char*
>(m_buffer.data());
524 int buf_size = CheckedConvert::toInt32(m_buffer.size());
525 while (buf_size > 0 &&
static_cast<char>(m_buffer[buf_size - 1]) ==
'\0') {
528 const String& name = parser.fileName();
529 ::xmlParserCtxtPtr ctxt = ::xmlNewParserCtxt();
530 ::xmlDocPtr doc = ::xmlCtxtReadMemory(ctxt, buf_base, buf_size,
531 name.
localstr(), encoding, options);
532 ::xmlFreeParserCtxt(ctxt);
538 ByteConstSpan m_buffer;
544class LibXml2_FileReader
549 LibXml2_FileReader(
const String& file_name)
550 : m_file_name(file_name)
557 const char* encoding =
nullptr;
558 int options = parser.options();
559 const char* file_name = m_file_name.
localstr();
560 ::xmlParserCtxtPtr ctxt = ::xmlNewParserCtxt();
561 ::xmlDocPtr doc = ::xmlCtxtReadFile(ctxt, file_name, encoding, options);
562 ::xmlFreeParserCtxt(ctxt);
574class XmlDocumentHolderLibXml2
579 XmlDocumentHolderLibXml2()
580 : m_document(
nullptr)
581 , m_document_node(
nullptr)
583 ~XmlDocumentHolderLibXml2()
586 ::xmlDocPtr doc = impl(m_document);
595 domimp._save(bytes, m_document, (-1));
602 String new_s = String::fromUtf8(bytes);
608 void assignDocument(DocumentPrv* doc)
611 m_document_node = (NodePrv*)doc;
613 DocumentPrv* _document()
const {
return m_document; }
617 DocumentPrv* m_document;
618 NodePrv* m_document_node;
628 m_p = cvt(LibXml2_DOMImplementation::getImplementation());
632DOMImplementation(ImplementationPrv* prv)
642void DOMImplementation::
649ImplementationPrv* DOMImplementation::
655bool DOMImplementation::
656hasFeature(
const DOMString& feature,
const DOMString& version)
const
658 ARCANE_UNUSED(feature);
659 ARCANE_UNUSED(version);
666createDocumentType(
const DOMString& qualified_name,
const DOMString& public_id,
667 const DOMString& system_id)
const
669 ARCANE_UNUSED(qualified_name);
670 ARCANE_UNUSED(public_id);
671 ARCANE_UNUSED(system_id);
679getInterface(
const DOMString& feature)
const
682 ARCANE_UNUSED(feature);
683 throw NotImplementedException(A_FUNCINFO);
687createDOMWriter()
const
690 throw NotImplementedException(A_FUNCINFO);
700createDocument(
const DOMString& namespace_uri,
const DOMString& qualified_name,
703 if (!namespace_uri.null())
704 ARCANE_THROW(NotImplementedException,
"non nul namespace-uri");
705 if (!qualified_name.null())
706 ARCANE_THROW(NotImplementedException,
"non nul qualified-name");
707 if (!doctype._null())
708 ARCANE_THROW(NotImplementedException,
"non nul doctype");
709 const xmlChar* xml_version =
nullptr;
710 xmlDocPtr doc = ::xmlNewDoc(xml_version);
717String DOMImplementation::
718_implementationName()
const
730 auto xml_doc =
new XmlDocumentHolderLibXml2();
731 xml_doc->assignDocument(_doc._impl());
739_load(
const String& fname, ITraceMng* msg,
const String& schemaname)
748_load(
const String& fname, ITraceMng* trace,
const String& schema_name,
752 LibXml2_FileReader reader(fname);
753 LibXml2_Parser parser(fname, trace);
754 auto doc_holder = parser.parse(&reader, schema_name, schema_data);
766 return new XmlDocumentHolderLibXml2();
768 LibXml2_MemoryReader reader(buffer);
769 LibXml2_Parser parser(name, trace);
777void DOMImplementation::
780 ARCANE_UNUSED(indent_level);
790 xmlDocPtr doc = impl(document._impl());
791 xmlBufferPtr buf = ::xmlBufferCreate();
794 if (indent_level > 0)
795 options = XML_SAVE_FORMAT;
796 xmlSaveCtxtPtr ctx = ::xmlSaveToBuffer(buf,
nullptr, options);
797 (void)::xmlSaveDoc(ctx, doc);
798 (void)::xmlSaveClose(ctx);
800 const xmlChar* content = ::xmlBufferContent(buf);
801 size_t content_len = ::xmlBufferLength(buf);
805 bytes.copy(buf_view);
807 ::xmlBufferFree(buf);
819 m_options |= XML_PARSE_DTDLOAD | XML_PARSE_NOENT | XML_PARSE_DTDATTR;
820 m_options |= XML_PARSE_XINCLUDE;
822 ::xmlDocPtr doc_ptr =
nullptr;
829 doc_ptr = reader->read(*
this);
833 err_handler.errorMessage());
836 xml_parser->assignDocument(cvt(doc_ptr));
840 int nb_xinclude = ::xmlXIncludeProcess(doc_ptr);
841 if (nb_xinclude == (-1))
843 err_handler.errorMessage());
847 String err_message = err_handler.errorMessage();
848 if (m_trace && !err_message.
null())
849 m_trace->info() <<
"Info parsing document " << fileName() <<
" : " << err_message;
857 validator.
validate(doc_ptr, schema_data);
860 return xml_parser.release();
872 if (m_schema_file_name.null() && schema_data.
empty())
876 if (!schema_data.
empty()) {
877 auto base_ptr =
reinterpret_cast<const char*
>(schema_data.
data());
878 m_schema_parser_context = ::xmlSchemaNewMemParserCtxt(base_ptr, schema_data.
size());
881 m_schema_parser_context = ::xmlSchemaNewParserCtxt(m_schema_file_name.localstr());
882 if (!m_schema_parser_context)
884 m_schema_ptr = xmlSchemaParse(m_schema_parser_context);
887 err_handler.errorMessage());
888 m_schema_valid_context = xmlSchemaNewValidCtxt(m_schema_ptr);
889 if (!m_schema_valid_context)
891 m_schema_file_name, err_handler.errorMessage());
892 xmlSchemaSetValidOptions(m_schema_valid_context, XML_SCHEMA_VAL_VC_I_CREATE);
893 int result = xmlSchemaValidateDoc(m_schema_valid_context, doc_ptr);
896 m_schema_file_name, err_handler.errorMessage());
915Node(
const Node& from)
920operator=(
const Node& from)
951 return (UShort)(impl(
m_p)->type);
957 ::xmlNodePtr first_children = impl(
m_p)->children;
958 return cvt(first_children);
968previousSibling()
const
978 xmlNodePtr next_node = impl(
m_p)->next;
979 return cvt(next_node);
985 return cvt(impl(
m_p)->parent);
1000 return fromChar(impl(
m_p)->name);
1006 ::xmlNodePtr xelement = impl(
m_p);
1007 xmlAttrPtr p = xelement->properties;
1008 return cvt((xmlNamedNodeMapPtr)(p));
1011ownerDocument()
const
1014 ::xmlNodePtr node = impl(
m_p);
1015 return cvt(node->doc);
1021 xmlChar* content = ::xmlNodeGetContent(impl(
m_p));
1022 return fromCharAndFree(content);
1025nodeValue(
const DOMString& str)
const
1033_assign(
const Node& node)
1038insertBefore(
const Node& new_child,
const Node& ref_child)
const
1040 ARCANE_UNUSED(new_child);
1041 ARCANE_UNUSED(ref_child);
1047replaceChild(
const Node& new_child,
const Node& old_child)
const
1049 ARCANE_UNUSED(new_child);
1050 ARCANE_UNUSED(old_child);
1056removeChild(
const Node& old_child)
const
1059 ::xmlNodePtr xchild = impl(old_child._impl());
1062 ::xmlUnlinkNode(xchild);
1066appendChild(
const Node& new_child)
const
1069 return cvt(::xmlAddChild(impl(
m_p), impl(new_child._impl())));
1072hasChildNodes()
const
1079cloneNode(
bool deep)
const
1082 ARCANE_UNUSED(deep);
1094prefix(
const DOMString& new_prefix)
const
1097 ARCANE_UNUSED(new_prefix);
1109isSupported(
const DOMString& feature,
const DOMString& version)
const
1111 ARCANE_UNUSED(feature);
1112 ARCANE_UNUSED(version);
1128 return fromChar(impl(
m_p)->name);
1145textContent(
const DOMString& value)
const
1148 ARCANE_UNUSED(value);
1153isSameNode(
const Node& node)
const
1156 ARCANE_UNUSED(node);
1161isEqualNode(
const Node& other)
const
1164 ARCANE_UNUSED(other);
1169isDefaultNamespace(
const DOMString& namespace_uri)
const
1172 ARCANE_UNUSED(namespace_uri);
1177lookupNamespaceURI(
const DOMString& prefix)
const
1180 ARCANE_UNUSED(prefix);
1185setUserData(
const DOMString& key,
const DOMObject& data,
1190 ARCANE_UNUSED(data);
1191 ARCANE_UNUSED(handler);
1192 throw NotImplementedException(A_FUNCINFO);
1195getUserData(
const DOMString& key)
const
1205 ::xmlNodePtr xnode = impl(
m_p);
1207 ::xmlFreeNode(xnode);
1209bool operator==(
const Node& n1,
const Node& n2)
1211 return impl(n1.
m_p) == impl(n2.
m_p);
1213bool operator!=(
const Node& n1,
const Node& n2)
1215 return !operator==(n1, n2);
1222CharacterData(CharacterDataPrv* v)
1223: Node(cvt((xmlNodePtr)impl(v)))
1238CharacterData(
const Node& node)
1242 ARCANE_UNUSED(node);
1248CharacterDataPrv* CharacterData::
1267Text(
const Text& node)
1272Text(
const Node& node)
1276 ARCANE_UNUSED(node);
1284 return cvt((xmlTextPtr)impl(
m_p));
1303Document(DocumentPrv* p)
1304:
Node(cvt((xmlNodePtr)impl(p)))
1307Document(
const Node& node)
1310 NodePrv* ni = node._impl();
1311 if (ni && impl(ni)->type == XML_DOCUMENT_NODE)
1314DocumentPrv* Document::
1317 return cvt((xmlDocPtr)impl(
m_p));
1327implementation()
const
1334documentElement()
const
1337 xmlDocPtr xdoc = impl(_impl());
1338 xmlNodePtr xnode = ::xmlDocGetRootElement(xdoc);
1339 return cvt((xmlElementPtr)xnode);
1342createElement(
const DOMString& name)
const
1345 xmlDocPtr xdoc = impl(_impl());
1346 xmlNsPtr nspace =
nullptr;
1347 xmlChar* content =
nullptr;
1348 xmlNodePtr xnode = ::xmlNewDocNode(xdoc, nspace, toChar(name), content);
1349 return cvt((xmlElementPtr)xnode);
1352createDocumentFragment()
const
1359createTextNode(
const DOMString& data)
const
1362 xmlDocPtr xdoc = impl(_impl());
1363 return cvt((xmlTextPtr)::xmlNewDocText(xdoc, toChar(data)));
1366createComment(
const DOMString& data)
const
1370 ARCANE_UNUSED(data);
1374createCDATASection(
const DOMString& data)
const
1378 ARCANE_UNUSED(data);
1382createProcessingInstruction(
const DOMString& target,
1383 const DOMString& data)
const
1386 ARCANE_UNUSED(target);
1387 ARCANE_UNUSED(data);
1393createAttribute(
const DOMString& name)
const
1396 ARCANE_UNUSED(name);
1402createEntityReference(
const DOMString& name)
const
1405 ARCANE_UNUSED(name);
1410getElementsByTagName(
const DOMString& tagname)
const
1413 ARCANE_UNUSED(tagname);
1418importNode(
const Node& imported_node,
bool deep)
const
1421 ARCANE_UNUSED(imported_node);
1422 ARCANE_UNUSED(deep);
1427createElementNS(
const DOMString& namespace_uri,
const DOMString& qualified_name)
const
1430 ARCANE_UNUSED(namespace_uri);
1431 ARCANE_UNUSED(qualified_name);
1436createAttributeNS(
const DOMString& namespace_uri,
const DOMString& qualified_name)
const
1439 ARCANE_UNUSED(namespace_uri);
1440 ARCANE_UNUSED(qualified_name);
1445getElementsByTagNameNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1448 ARCANE_UNUSED(namespace_uri);
1449 ARCANE_UNUSED(local_name);
1454getElementById(
const DOMString& element_id)
const
1458 ARCANE_UNUSED(element_id);
1462actualEncoding()
const
1469actualEncoding(
const DOMString& value)
const
1472 ARCANE_UNUSED(value);
1473 throw NotImplementedException(A_FUNCINFO);
1480 throw NotImplementedException(A_FUNCINFO);
1484encoding(
const DOMString& value)
const
1487 ARCANE_UNUSED(value);
1488 throw NotImplementedException(A_FUNCINFO);
1495 throw NotImplementedException(A_FUNCINFO);
1499standalone(
bool value)
const
1502 ARCANE_UNUSED(value);
1503 throw NotImplementedException(A_FUNCINFO);
1507strictErrorChecking()
const
1514strictErrorChecking(
bool value)
const
1517 ARCANE_UNUSED(value);
1522documentURI(
const DOMString& document_uri)
const
1525 ARCANE_UNUSED(document_uri);
1538adoptNode(
const Node& source)
const
1542 ARCANE_UNUSED(source);
1553renameNode(
const Node& node,
const DOMString& namespace_uri,
1554 const DOMString& name)
1558 ARCANE_UNUSED(node);
1559 ARCANE_UNUSED(namespace_uri);
1560 ARCANE_UNUSED(name);
1573DocumentFragment(DocumentFragmentPrv* prv)
1574:
Node(cvt((xmlNodePtr)impl(prv)))
1585Comment(CommentPrv* prv)
1597CDATASection(CDATASectionPrv* prv)
1598:
Text(cvt((xmlTextPtr)impl(prv)))
1609EntityReference(EntityReferencePrv* prv)
1610:
Node(cvt((xmlNodePtr)impl(prv)))
1621NodeList(NodeListPrv* prv)
1632item(ULong index)
const
1635 ARCANE_UNUSED(index);
1650DOMString CharacterData::
1658data(
const DOMString& value)
const
1661 ARCANE_UNUSED(value);
1665ULong CharacterData::
1672DOMString CharacterData::
1673substringData(ULong offset, ULong count)
const
1676 ARCANE_UNUSED(offset);
1677 ARCANE_UNUSED(count);
1682appendData(
const DOMString& arg)
const
1690insertData(ULong offset,
const DOMString& arg)
const
1693 ARCANE_UNUSED(offset);
1699deleteData(ULong offset, ULong count)
const
1702 ARCANE_UNUSED(offset);
1703 ARCANE_UNUSED(count);
1708replaceData(ULong offset, ULong count,
const DOMString& arg)
const
1712 ARCANE_UNUSED(offset);
1713 ARCANE_UNUSED(count);
1723:
Node(cvt((xmlNodePtr)impl(p)))
1728Attr(
const Node& node)
1731 ARCANE_UNUSED(node);
1741 return cvt((xmlAttrPtr)impl(
m_p));
1765value(
const DOMString& str)
const
1788Element(ElementPrv* p)
1789:
Node(cvt((xmlNodePtr)impl(p)))
1792Element(
const Node& node)
1795 NodePrv* ni = node._impl();
1796 if (ni && impl(ni)->type == XML_ELEMENT_NODE)
1803ElementPrv* Element::
1806 return cvt((xmlElementPtr)impl(
m_p));
1817getAttribute(
const DOMString& name)
const
1820 Attr a = getAttributeNode(name);
1823 ::xmlChar* prop = ::xmlGetProp(impl(
m_p), toChar(name));
1824 String s = fromChar(prop);
1829setAttribute(
const DOMString& name,
const DOMString& value)
const
1832 ::xmlSetProp(impl(
m_p), toChar(name), toChar(value));
1835removeAttribute(
const DOMString& name)
const
1838 ARCANE_UNUSED(name);
1843getAttributeNode(
const DOMString& name)
const
1846 xmlElementPtr elem_ptr = (xmlElementPtr)(impl(_impl()));
1847 return cvt(::xmlHasProp((xmlNodePtr)elem_ptr, toChar(name)));
1850setAttributeNode(
const Attr& new_attr)
const
1853 ARCANE_UNUSED(new_attr);
1858removeAttributeNode(
const Attr& old_attr)
const
1861 ARCANE_UNUSED(old_attr);
1866getElementsByTagName(
const DOMString& name)
const
1869 ARCANE_UNUSED(name);
1874getAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1877 ARCANE_UNUSED(namespace_uri);
1878 ARCANE_UNUSED(local_name);
1883setAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name,
1884 const DOMString& value)
const
1887 ARCANE_UNUSED(namespace_uri);
1888 ARCANE_UNUSED(local_name);
1889 ARCANE_UNUSED(value);
1894removeAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1897 ARCANE_UNUSED(namespace_uri);
1898 ARCANE_UNUSED(local_name);
1903getAttributeNodeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1906 ARCANE_UNUSED(namespace_uri);
1907 ARCANE_UNUSED(local_name);
1912setAttributeNodeNS(
const Attr& new_attr)
const
1915 new_attr._checkValid();
1920getElementsByTagNameNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1923 ARCANE_UNUSED(namespace_uri);
1924 ARCANE_UNUSED(local_name);
1929hasAttribute(
const DOMString& name)
const
1932 ARCANE_UNUSED(name);
1937hasAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1940 ARCANE_UNUSED(namespace_uri);
1941 ARCANE_UNUSED(local_name);
1950splitText(ULong offset)
const
1953 ARCANE_UNUSED(offset);
1965replaceWholeText(
const DOMString& content)
const
1968 ARCANE_UNUSED(content);
1981DocumentType(DocumentTypePrv* prv)
1982:
Node(cvt((xmlNodePtr)impl(prv)))
1984DocumentTypePrv* DocumentType::
1987 return cvt((xmlDocTypePtr)impl(
m_p));
1989DOMString DocumentType::
2010DOMString DocumentType::
2017DOMString DocumentType::
2024DOMString DocumentType::
2025internalSubset()
const
2035NotationPrv* Notation::
2038 return cvt((xmlNotationPtr)impl(
m_p));
2063 return cvt((xmlEntityPtr)impl(
m_p));
2091ProcessingInstruction::
2092ProcessingInstruction()
2095ProcessingInstruction::
2096ProcessingInstruction(ProcessingInstructionPrv* prv)
2097:
Node(cvt((xmlNodePtr)impl(prv)))
2099ProcessingInstructionPrv* ProcessingInstruction::
2102 return cvt((xmlProcessingInstructionPtr)impl(
m_p));
2105DOMString ProcessingInstruction::
2112DOMString ProcessingInstruction::
2119void ProcessingInstruction::
2120data(
const DOMString& value)
const
2123 ARCANE_UNUSED(value);
2136NamedNodeMap(NamedNodeMapPrv* p)
2152NamedNodeMapPrv* NamedNodeMap::
2168 ::xmlNodePtr xnode = (::xmlNodePtr)impl(m_p);
2171 xnode = xnode->next;
2176getNamedItem(
const DOMString& name)
const
2187 ::xmlAttrPtr xattrlist = (::xmlAttrPtr)impl(m_p);
2188 const ::xmlChar* aname = toChar(name);
2189 ::xmlAttrPtr current = xattrlist;
2191 if (current->type == XML_ATTRIBUTE_NODE && current->ns) {
2192 std::string full_name = (
const char*)(current->ns->prefix);
2194 full_name += (
const char*)(current->name);
2195 if (xmlStrEqual(aname, (
const xmlChar*)full_name.c_str()) == 1) {
2196 return cvt((::xmlNodePtr)current);
2199 if (xmlStrEqual(aname, current->name) == 1) {
2200 return cvt((::xmlNodePtr)current);
2202 current = current->next;
2207setNamedItem(
const Node& arg)
const
2209 if (_null() || arg._null())
2215removeNamedItem(
const DOMString& name)
const
2219 ARCANE_UNUSED(name);
2224item(ULong index)
const
2229 ::xmlNodePtr xnode = (::xmlNodePtr)impl(m_p);
2232 return Node(cvt(xnode));
2234 xnode = xnode->next;
2239getNamedItemNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
2243 ARCANE_UNUSED(namespace_uri);
2244 ARCANE_UNUSED(local_name);
2249setNamedItemNS(
const Node& arg)
const
2259removeNamedItemNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
2263 ARCANE_UNUSED(namespace_uri);
2264 ARCANE_UNUSED(local_name);
2273getDOMImplementation(
const DOMString& features)
const
2275 ARCANE_UNUSED(features);
2276 throw NotImplementedException(A_FUNCINFO);
2282void UserDataHandler::
2283handle(UShort operation,
const DOMString& key,
const DOMObject& data,
2284 const Node& src,
const Node& dest)
const
2286 ARCANE_UNUSED(operation);
2288 ARCANE_UNUSED(data);
2290 ARCANE_UNUSED(dest);
2291 throw NotImplementedException(A_FUNCINFO);
2302DOMWriter(DOMWriterPrv* p)
2331DOMWriterPrv* DOMWriter::
2338writeNode(
const Node& node)
const
2340 ARCANE_UNUSED(node);
2341 throw NotImplementedException(A_FUNCINFO);
2345encoding(
const String& encoding)
2348 ARCANE_UNUSED(encoding);
2349 throw NotImplementedException(A_FUNCINFO);
2356 throw NotImplementedException(A_FUNCINFO);
2367DOMError(DOMErrorPrv* p)
2396DOMErrorPrv* DOMError::
2417relatedException()
const
2434bool DOMErrorHandler::
2435handleError(
const DOMError& error)
const
2437 ARCANE_UNUSED(error);
2438 throw NotImplementedException(A_FUNCINFO);
2449DOMLocator(DOMLocatorPrv* p)
2478DOMLocatorPrv* DOMLocator::
2500DOMString DOMLocator::
2515createExpression(
const DOMString& expression,
2518 ARCANE_UNUSED(expression);
2519 ARCANE_UNUSED(resolver);
2520 throw NotImplementedException(A_FUNCINFO);
2525 throw NotImplementedException(A_FUNCINFO);
2528createNSResolver(
const Node& node_resolver)
const
2530 ARCANE_UNUSED(node_resolver);
2531 throw NotImplementedException(A_FUNCINFO);
2534evaluate(
const DOMString& expression,
const Node& context_node,
2538 ARCANE_UNUSED(expression);
2539 ARCANE_UNUSED(context_node);
2540 ARCANE_UNUSED(resolver);
2541 ARCANE_UNUSED(type);
2542 ARCANE_UNUSED(result);
2543 throw NotImplementedException(A_FUNCINFO);
2547 const Node& context_node, UShort type,
2550 ARCANE_UNUSED(expression);
2551 ARCANE_UNUSED(context_node);
2552 ARCANE_UNUSED(type);
2553 ARCANE_UNUSED(result);
2554 throw NotImplementedException(A_FUNCINFO);
2560DOMString XPathNSResolver::
2561lookupNamespaceURI(
const DOMString& prefix)
const
2563 ARCANE_UNUSED(prefix);
2564 throw NotImplementedException(A_FUNCINFO);
2573 throw NotImplementedException(A_FUNCINFO);
2578 throw NotImplementedException(A_FUNCINFO);
2580DOMString XPathResult::
2583 throw NotImplementedException(A_FUNCINFO);
2588 throw NotImplementedException(A_FUNCINFO);
2591singleNodeValue()
const
2593 throw NotImplementedException(A_FUNCINFO);
2596getSetIterator(
bool ordered)
const
2598 ARCANE_UNUSED(ordered);
2599 throw NotImplementedException(A_FUNCINFO);
2602getSetSnapshot(
bool ordered)
const
2604 ARCANE_UNUSED(ordered);
2605 throw NotImplementedException(A_FUNCINFO);
2611Node XPathSetIterator::
2614 throw NotImplementedException(A_FUNCINFO);
2620ULong XPathSetSnapshot::
2623 throw NotImplementedException(A_FUNCINFO);
2625Node XPathSetSnapshot::
2626item(ULong index)
const
2628 ARCANE_UNUSED(index);
2629 throw NotImplementedException(A_FUNCINFO);
2638 throw NotImplementedException(A_FUNCINFO);
2644void DOMImplementation::
2659void DOMImplementation::
2664 ::xmlCleanupParser();
#define ARCANE_THROW(exception_class,...)
Macro for throwing an exception with formatting.
constexpr const_pointer data() const noexcept
Pointer to the allocated memory.
constexpr Integer size() const noexcept
Number of elements in the array.
constexpr bool empty() const noexcept
true if the array is empty (size()==0)
Manager of a DOM document.
Node()=default
Creation of a node not connected to the mesh.
Unicode character string constructor.
String toString() const
Returns the constructed character string.
Unicode character string.
bool null() const
Returns true if the string is null.
const char * localstr() const
Returns the conversion of the instance into UTF-8 encoding.
XML file related exceptions.
Document createDocument(const DOMString &namespace_uri, const DOMString &qualified_name, const DocumentType &doctype) const
IXmlDocumentHolder * _load(const String &fname, ITraceMng *msg, const String &schemaname)
IXmlDocumentHolder * _newDocument()
The following methods are internal to Arcane.
Handling of XML reader errors.
static void XMLCDECL handler(void *user_data, T *e)
Handler to connect to libxml2.
Class encapsulating the XML document parser.
IXmlDocumentHolder * parse(ILibXml2_Reader *reader, const String &schema_name, ByteConstArrayView schema_data)
Parses the XML content via the reader reader.
Class encapsulating XML Schema validation of an XML document.
void validate(::xmlDocPtr doc, ByteConstArrayView schema_data)
Validates an XML document.
NodePrv * m_p
Class implementation.
void releaseNode()
Destroys the node.
IXmlDocumentHolder * clone() override
Clones this document.
XmlNode documentNode() override
Document node. This node is null if the document does not exist.
String save() override
Saves this document and returns the string.
void save(ByteArray &bytes) override
Saves this document into the array bytes.
GenericDocument< UTF8<> > Document
GenericDocument with UTF8 encoding.
Integer len(const char *s)
Returns the length of the string s.
Integer arcaneCheckArraySize(unsigned long long size)
Checks that size can be converted into an 'Integer' to serve as the size of an array....
void arcaneNullPointerError()
Signals the use of a null pointer.
Int32 Integer
Type representing an integer.
Array< Byte > ByteArray
Dynamic one-dimensional array of characters.
UniqueArray< Byte > ByteUniqueArray
Dynamic 1D array of characters.
Span< const std::byte > ByteConstSpan
Read-only view of a 1D array of characters.
ConstArrayView< Byte > ByteConstArrayView
C equivalent of a 1D array of characters.
unsigned char Byte
Type of a byte.