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>
85static xmlNodePtr impl(NodePrv* p)
89static xmlAttrPtr impl(AttrPrv* p)
93static xmlElementPtr impl(ElementPrv* p)
95 return (xmlElementPtr)p;
97static xmlNamedNodeMapPtr impl(NamedNodeMapPrv* p)
99 return (xmlNamedNodeMapPtr)p;
101static xmlDocPtr impl(DocumentPrv* p)
105static xmlDocTypePtr impl(DocumentTypePrv* p)
107 return (xmlDocTypePtr)p;
113static xmlCharacterDataPtr impl(CharacterDataPrv* p)
115 return (xmlCharacterDataPtr)p;
117static xmlTextPtr impl(TextPrv* p)
119 return (xmlTextPtr)p;
121[[maybe_unused]]
static xmlNodeListPtr impl(NodeListPrv* p)
123 return (xmlNodeListPtr)p;
125static xmlDocumentFragmentPtr impl(DocumentFragmentPrv* p)
127 return (xmlDocumentFragmentPtr)p;
129static xmlCDATAPtr impl(CDATASectionPrv* p)
131 return (xmlCDATAPtr)p;
133static xmlProcessingInstructionPtr impl(ProcessingInstructionPrv* p)
135 return (xmlProcessingInstructionPtr)p;
137static xmlEntityReferencePtr impl(EntityReferencePrv* p)
139 return (xmlEntityReferencePtr)p;
141[[maybe_unused]]
static xmlEntityPtr impl(EntityPrv* p)
143 return (xmlEntityPtr)p;
145[[maybe_unused]]
static xmlNotationPtr impl(NotationPrv* p)
147 return (xmlNotationPtr)p;
152static NodePrv* cvt(xmlNodePtr p)
156static AttrPrv* cvt(xmlAttrPtr p)
160static ElementPrv* cvt(xmlElementPtr p)
162 return (ElementPrv*)p;
164static NamedNodeMapPrv* cvt(xmlNamedNodeMapPtr p)
166 return (NamedNodeMapPrv*)p;
168static DocumentPrv* cvt(xmlDocPtr p)
170 return (DocumentPrv*)p;
172static DocumentTypePrv* cvt(xmlDocTypePtr p)
174 return (DocumentTypePrv*)p;
178 return (ImplementationPrv*)p;
180static CharacterDataPrv* cvt(xmlCharacterDataPtr p)
182 return (CharacterDataPrv*)p;
184static TextPrv* cvt(xmlTextPtr p)
188[[maybe_unused]]
static NodeListPrv* cvt(xmlNodeListPtr p)
190 return (NodeListPrv*)p;
192[[maybe_unused]]
static DocumentFragmentPrv* cvt(xmlDocumentFragmentPtr p)
194 return (DocumentFragmentPrv*)p;
196[[maybe_unused]]
static CommentPrv* cvt(xmlCommentPtr p)
198 return (CommentPrv*)p;
200[[maybe_unused]]
static CDATASectionPrv* cvt(xmlCDATAPtr p)
202 return (CDATASectionPrv*)p;
204static ProcessingInstructionPrv* cvt(xmlProcessingInstructionPtr p)
206 return (ProcessingInstructionPrv*)p;
208[[maybe_unused]]
static EntityReferencePrv* cvt(xmlEntityReferencePtr p)
210 return (EntityReferencePrv*)p;
212static EntityPrv* cvt(xmlEntityPtr p)
214 return (EntityPrv*)p;
216static NotationPrv* cvt(xmlNotationPtr p)
218 return (NotationPrv*)p;
227domStringToXmlChar(
const String& str)
229 const xmlChar* ch =
reinterpret_cast<const xmlChar*
>(str.utf8().data());
234toChar(
const String& value)
236 return domStringToXmlChar(value);
239String fromChar(
const xmlChar* value)
246 return DOMString(bytes);
249String fromCharAndFree(xmlChar* value)
253 String s(fromChar(value));
261NodePrv* toNodePrv(
const Node& node)
272#define TNIE throw NotImplementedException(A_FUNCINFO)
284 return &sDOMImplementation;
299class LibXml2_ErrorHandler
303 LibXml2_ErrorHandler()
307 ~LibXml2_ErrorHandler()
309 ::xmlSetStructuredErrorFunc(
nullptr,
nullptr);
316 static void XMLCDECL
handler(
void* user_data, T* e)
320 auto x =
reinterpret_cast<LibXml2_ErrorHandler*
>(user_data);
328 const String& errorMessage()
const {
return m_error_message; }
336 void addError(
const xmlError* e)
339 if (e->level == XML_ERR_WARNING)
341 else if (e->level == XML_ERR_ERROR)
343 else if (e->level == XML_ERR_FATAL)
364 m_error_message = m_error_message + sb.
toString();
384 : m_file_name(file_name)
389 m_options = XML_PARSE_HUGE;
409 const String& fileName()
const {
return m_file_name; }
410 int options()
const {
return m_options; }
430class LibXml2_SchemaValidator
434 LibXml2_SchemaValidator(
const String& schema_file_name)
435 : m_schema_file_name(schema_file_name)
436 , m_schema_parser_context(
nullptr)
437 , m_schema_ptr(
nullptr)
438 , m_schema_valid_context(
nullptr)
441 ~LibXml2_SchemaValidator()
462 String m_schema_file_name;
463 ::xmlSchemaParserCtxtPtr m_schema_parser_context;
464 ::xmlSchemaPtr m_schema_ptr;
465 ::xmlSchemaValidCtxtPtr m_schema_valid_context;
471 if (m_schema_parser_context) {
472 ::xmlSchemaFreeParserCtxt(m_schema_parser_context);
473 m_schema_parser_context =
nullptr;
476 ::xmlSchemaFree(m_schema_ptr);
477 m_schema_ptr =
nullptr;
479 if (m_schema_valid_context) {
480 ::xmlSchemaFreeValidCtxt(m_schema_valid_context);
481 m_schema_valid_context =
nullptr;
503class LibXml2_MemoryReader
508 LibXml2_MemoryReader(ByteConstSpan buffer)
516 const char* encoding =
nullptr;
517 int options = parser.options();
518 const char* buf_base =
reinterpret_cast<const char*
>(m_buffer.data());
522 int buf_size = CheckedConvert::toInt32(m_buffer.size());
523 while (buf_size > 0 &&
static_cast<char>(m_buffer[buf_size - 1]) ==
'\0') {
526 const String& name = parser.fileName();
527 ::xmlParserCtxtPtr ctxt = ::xmlNewParserCtxt();
528 ::xmlDocPtr doc = ::xmlCtxtReadMemory(ctxt, buf_base, buf_size,
529 name.
localstr(), encoding, options);
530 ::xmlFreeParserCtxt(ctxt);
536 ByteConstSpan m_buffer;
542class LibXml2_FileReader
547 LibXml2_FileReader(
const String& file_name)
548 : m_file_name(file_name)
555 const char* encoding =
nullptr;
556 int options = parser.options();
557 const char* file_name = m_file_name.
localstr();
558 ::xmlParserCtxtPtr ctxt = ::xmlNewParserCtxt();
559 ::xmlDocPtr doc = ::xmlCtxtReadFile(ctxt, file_name, encoding, options);
560 ::xmlFreeParserCtxt(ctxt);
572class XmlDocumentHolderLibXml2
577 XmlDocumentHolderLibXml2()
578 : m_document(
nullptr)
579 , m_document_node(
nullptr)
581 ~XmlDocumentHolderLibXml2()
584 ::xmlDocPtr doc = impl(m_document);
593 domimp._save(bytes, m_document, (-1));
600 String new_s = String::fromUtf8(bytes);
606 void assignDocument(DocumentPrv* doc)
609 m_document_node = (NodePrv*)doc;
611 DocumentPrv* _document()
const {
return m_document; }
615 DocumentPrv* m_document;
616 NodePrv* m_document_node;
626 m_p = cvt(LibXml2_DOMImplementation::getImplementation());
630DOMImplementation(ImplementationPrv* prv)
640void DOMImplementation::
647ImplementationPrv* DOMImplementation::
653bool DOMImplementation::
654hasFeature(
const DOMString& feature,
const DOMString& version)
const
656 ARCANE_UNUSED(feature);
657 ARCANE_UNUSED(version);
664createDocumentType(
const DOMString& qualified_name,
const DOMString& public_id,
665 const DOMString& system_id)
const
667 ARCANE_UNUSED(qualified_name);
668 ARCANE_UNUSED(public_id);
669 ARCANE_UNUSED(system_id);
677getInterface(
const DOMString& feature)
const
680 ARCANE_UNUSED(feature);
681 throw NotImplementedException(A_FUNCINFO);
685createDOMWriter()
const
688 throw NotImplementedException(A_FUNCINFO);
698createDocument(
const DOMString& namespace_uri,
const DOMString& qualified_name,
701 if (!namespace_uri.null())
702 ARCANE_THROW(NotImplementedException,
"non nul namespace-uri");
703 if (!qualified_name.null())
704 ARCANE_THROW(NotImplementedException,
"non nul qualified-name");
705 if (!doctype._null())
706 ARCANE_THROW(NotImplementedException,
"non nul doctype");
707 const xmlChar* xml_version =
nullptr;
708 xmlDocPtr doc = ::xmlNewDoc(xml_version);
715String DOMImplementation::
716_implementationName()
const
728 auto xml_doc =
new XmlDocumentHolderLibXml2();
729 xml_doc->assignDocument(_doc._impl());
737_load(
const String& fname, ITraceMng* msg,
const String& schemaname)
746_load(
const String& fname, ITraceMng* trace,
const String& schema_name,
750 LibXml2_FileReader reader(fname);
751 LibXml2_Parser parser(fname, trace);
752 auto doc_holder = parser.parse(&reader, schema_name, schema_data);
764 return new XmlDocumentHolderLibXml2();
766 LibXml2_MemoryReader reader(buffer);
767 LibXml2_Parser parser(name, trace);
775void DOMImplementation::
778 ARCANE_UNUSED(indent_level);
788 xmlDocPtr doc = impl(document._impl());
789 xmlBufferPtr buf = ::xmlBufferCreate();
792 if (indent_level > 0)
793 options = XML_SAVE_FORMAT;
794 xmlSaveCtxtPtr ctx = ::xmlSaveToBuffer(buf,
nullptr, options);
795 (void)::xmlSaveDoc(ctx, doc);
796 (void)::xmlSaveClose(ctx);
798 const xmlChar* content = ::xmlBufferContent(buf);
799 size_t content_len = ::xmlBufferLength(buf);
803 bytes.copy(buf_view);
805 ::xmlBufferFree(buf);
817 m_options |= XML_PARSE_DTDLOAD | XML_PARSE_NOENT | XML_PARSE_DTDATTR;
818 m_options |= XML_PARSE_XINCLUDE;
820 ::xmlDocPtr doc_ptr =
nullptr;
827 doc_ptr = reader->read(*
this);
831 err_handler.errorMessage());
834 xml_parser->assignDocument(cvt(doc_ptr));
838 int nb_xinclude = ::xmlXIncludeProcess(doc_ptr);
839 if (nb_xinclude == (-1))
841 err_handler.errorMessage());
845 String err_message = err_handler.errorMessage();
846 if (m_trace && !err_message.
null())
847 m_trace->info() <<
"Info parsing document " << fileName() <<
" : " << err_message;
855 validator.
validate(doc_ptr, schema_data);
858 return xml_parser.release();
870 if (m_schema_file_name.null() && schema_data.
empty())
874 if (!schema_data.
empty()) {
875 auto base_ptr =
reinterpret_cast<const char*
>(schema_data.
data());
876 m_schema_parser_context = ::xmlSchemaNewMemParserCtxt(base_ptr, schema_data.
size());
879 m_schema_parser_context = ::xmlSchemaNewParserCtxt(m_schema_file_name.localstr());
880 if (!m_schema_parser_context)
882 m_schema_ptr = xmlSchemaParse(m_schema_parser_context);
885 err_handler.errorMessage());
886 m_schema_valid_context = xmlSchemaNewValidCtxt(m_schema_ptr);
887 if (!m_schema_valid_context)
889 m_schema_file_name, err_handler.errorMessage());
890 xmlSchemaSetValidOptions(m_schema_valid_context, XML_SCHEMA_VAL_VC_I_CREATE);
891 int result = xmlSchemaValidateDoc(m_schema_valid_context, doc_ptr);
894 m_schema_file_name, err_handler.errorMessage());
913Node(
const Node& from)
918operator=(
const Node& from)
949 return (UShort)(impl(
m_p)->type);
955 ::xmlNodePtr first_children = impl(
m_p)->children;
956 return cvt(first_children);
966previousSibling()
const
976 xmlNodePtr next_node = impl(
m_p)->next;
977 return cvt(next_node);
983 return cvt(impl(
m_p)->parent);
998 return fromChar(impl(
m_p)->name);
1004 ::xmlNodePtr xelement = impl(
m_p);
1005 xmlAttrPtr p = xelement->properties;
1006 return cvt((xmlNamedNodeMapPtr)(p));
1009ownerDocument()
const
1012 ::xmlNodePtr node = impl(
m_p);
1013 return cvt(node->doc);
1019 xmlChar* content = ::xmlNodeGetContent(impl(
m_p));
1020 return fromCharAndFree(content);
1023nodeValue(
const DOMString& str)
const
1031_assign(
const Node& node)
1036insertBefore(
const Node& new_child,
const Node& ref_child)
const
1038 ARCANE_UNUSED(new_child);
1039 ARCANE_UNUSED(ref_child);
1045replaceChild(
const Node& new_child,
const Node& old_child)
const
1047 ARCANE_UNUSED(new_child);
1048 ARCANE_UNUSED(old_child);
1054removeChild(
const Node& old_child)
const
1057 ::xmlNodePtr xchild = impl(old_child._impl());
1060 ::xmlUnlinkNode(xchild);
1064appendChild(
const Node& new_child)
const
1067 return cvt(::xmlAddChild(impl(
m_p), impl(new_child._impl())));
1070hasChildNodes()
const
1077cloneNode(
bool deep)
const
1080 ARCANE_UNUSED(deep);
1092prefix(
const DOMString& new_prefix)
const
1095 ARCANE_UNUSED(new_prefix);
1107isSupported(
const DOMString& feature,
const DOMString& version)
const
1109 ARCANE_UNUSED(feature);
1110 ARCANE_UNUSED(version);
1126 return fromChar(impl(
m_p)->name);
1143textContent(
const DOMString& value)
const
1146 ARCANE_UNUSED(value);
1151isSameNode(
const Node& node)
const
1154 ARCANE_UNUSED(node);
1159isEqualNode(
const Node& other)
const
1162 ARCANE_UNUSED(other);
1167isDefaultNamespace(
const DOMString& namespace_uri)
const
1170 ARCANE_UNUSED(namespace_uri);
1175lookupNamespaceURI(
const DOMString& prefix)
const
1178 ARCANE_UNUSED(prefix);
1183setUserData(
const DOMString& key,
const DOMObject& data,
1188 ARCANE_UNUSED(data);
1189 ARCANE_UNUSED(handler);
1190 throw NotImplementedException(A_FUNCINFO);
1193getUserData(
const DOMString& key)
const
1203 ::xmlNodePtr xnode = impl(
m_p);
1205 ::xmlFreeNode(xnode);
1207bool operator==(
const Node& n1,
const Node& n2)
1209 return impl(n1.
m_p) == impl(n2.
m_p);
1211bool operator!=(
const Node& n1,
const Node& n2)
1213 return !operator==(n1, n2);
1220CharacterData(CharacterDataPrv* v)
1221: Node(cvt((xmlNodePtr)impl(v)))
1236CharacterData(
const Node& node)
1240 ARCANE_UNUSED(node);
1246CharacterDataPrv* CharacterData::
1265Text(
const Text& node)
1270Text(
const Node& node)
1274 ARCANE_UNUSED(node);
1282 return cvt((xmlTextPtr)impl(
m_p));
1301Document(DocumentPrv* p)
1302:
Node(cvt((xmlNodePtr)impl(p)))
1305Document(
const Node& node)
1308 NodePrv* ni = node._impl();
1309 if (ni && impl(ni)->type == XML_DOCUMENT_NODE)
1312DocumentPrv* Document::
1315 return cvt((xmlDocPtr)impl(
m_p));
1325implementation()
const
1332documentElement()
const
1335 xmlDocPtr xdoc = impl(_impl());
1336 xmlNodePtr xnode = ::xmlDocGetRootElement(xdoc);
1337 return cvt((xmlElementPtr)xnode);
1340createElement(
const DOMString& name)
const
1343 xmlDocPtr xdoc = impl(_impl());
1344 xmlNsPtr nspace =
nullptr;
1345 xmlChar* content =
nullptr;
1346 xmlNodePtr xnode = ::xmlNewDocNode(xdoc, nspace, toChar(name), content);
1347 return cvt((xmlElementPtr)xnode);
1350createDocumentFragment()
const
1357createTextNode(
const DOMString& data)
const
1360 xmlDocPtr xdoc = impl(_impl());
1361 return cvt((xmlTextPtr)::xmlNewDocText(xdoc, toChar(data)));
1364createComment(
const DOMString& data)
const
1368 ARCANE_UNUSED(data);
1372createCDATASection(
const DOMString& data)
const
1376 ARCANE_UNUSED(data);
1380createProcessingInstruction(
const DOMString& target,
1381 const DOMString& data)
const
1384 ARCANE_UNUSED(target);
1385 ARCANE_UNUSED(data);
1391createAttribute(
const DOMString& name)
const
1394 ARCANE_UNUSED(name);
1400createEntityReference(
const DOMString& name)
const
1403 ARCANE_UNUSED(name);
1408getElementsByTagName(
const DOMString& tagname)
const
1411 ARCANE_UNUSED(tagname);
1416importNode(
const Node& imported_node,
bool deep)
const
1419 ARCANE_UNUSED(imported_node);
1420 ARCANE_UNUSED(deep);
1425createElementNS(
const DOMString& namespace_uri,
const DOMString& qualified_name)
const
1428 ARCANE_UNUSED(namespace_uri);
1429 ARCANE_UNUSED(qualified_name);
1434createAttributeNS(
const DOMString& namespace_uri,
const DOMString& qualified_name)
const
1437 ARCANE_UNUSED(namespace_uri);
1438 ARCANE_UNUSED(qualified_name);
1443getElementsByTagNameNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1446 ARCANE_UNUSED(namespace_uri);
1447 ARCANE_UNUSED(local_name);
1452getElementById(
const DOMString& element_id)
const
1456 ARCANE_UNUSED(element_id);
1460actualEncoding()
const
1467actualEncoding(
const DOMString& value)
const
1470 ARCANE_UNUSED(value);
1471 throw NotImplementedException(A_FUNCINFO);
1478 throw NotImplementedException(A_FUNCINFO);
1482encoding(
const DOMString& value)
const
1485 ARCANE_UNUSED(value);
1486 throw NotImplementedException(A_FUNCINFO);
1493 throw NotImplementedException(A_FUNCINFO);
1497standalone(
bool value)
const
1500 ARCANE_UNUSED(value);
1501 throw NotImplementedException(A_FUNCINFO);
1505strictErrorChecking()
const
1512strictErrorChecking(
bool value)
const
1515 ARCANE_UNUSED(value);
1520documentURI(
const DOMString& document_uri)
const
1523 ARCANE_UNUSED(document_uri);
1536adoptNode(
const Node& source)
const
1540 ARCANE_UNUSED(source);
1551renameNode(
const Node& node,
const DOMString& namespace_uri,
1552 const DOMString& name)
1556 ARCANE_UNUSED(node);
1557 ARCANE_UNUSED(namespace_uri);
1558 ARCANE_UNUSED(name);
1571DocumentFragment(DocumentFragmentPrv* prv)
1572:
Node(cvt((xmlNodePtr)impl(prv)))
1583Comment(CommentPrv* prv)
1595CDATASection(CDATASectionPrv* prv)
1596:
Text(cvt((xmlTextPtr)impl(prv)))
1607EntityReference(EntityReferencePrv* prv)
1608:
Node(cvt((xmlNodePtr)impl(prv)))
1619NodeList(NodeListPrv* prv)
1630item(ULong index)
const
1633 ARCANE_UNUSED(index);
1648DOMString CharacterData::
1656data(
const DOMString& value)
const
1659 ARCANE_UNUSED(value);
1663ULong CharacterData::
1670DOMString CharacterData::
1671substringData(ULong offset, ULong count)
const
1674 ARCANE_UNUSED(offset);
1675 ARCANE_UNUSED(count);
1680appendData(
const DOMString& arg)
const
1688insertData(ULong offset,
const DOMString& arg)
const
1691 ARCANE_UNUSED(offset);
1697deleteData(ULong offset, ULong count)
const
1700 ARCANE_UNUSED(offset);
1701 ARCANE_UNUSED(count);
1706replaceData(ULong offset, ULong count,
const DOMString& arg)
const
1710 ARCANE_UNUSED(offset);
1711 ARCANE_UNUSED(count);
1721:
Node(cvt((xmlNodePtr)impl(p)))
1726Attr(
const Node& node)
1729 ARCANE_UNUSED(node);
1739 return cvt((xmlAttrPtr)impl(
m_p));
1763value(
const DOMString& str)
const
1786Element(ElementPrv* p)
1787:
Node(cvt((xmlNodePtr)impl(p)))
1790Element(
const Node& node)
1793 NodePrv* ni = node._impl();
1794 if (ni && impl(ni)->type == XML_ELEMENT_NODE)
1801ElementPrv* Element::
1804 return cvt((xmlElementPtr)impl(
m_p));
1815getAttribute(
const DOMString& name)
const
1818 Attr a = getAttributeNode(name);
1821 ::xmlChar* prop = ::xmlGetProp(impl(
m_p), toChar(name));
1822 String s = fromChar(prop);
1827setAttribute(
const DOMString& name,
const DOMString& value)
const
1830 ::xmlSetProp(impl(
m_p), toChar(name), toChar(value));
1833removeAttribute(
const DOMString& name)
const
1836 ARCANE_UNUSED(name);
1841getAttributeNode(
const DOMString& name)
const
1844 xmlElementPtr elem_ptr = (xmlElementPtr)(impl(_impl()));
1845 return cvt(::xmlHasProp((xmlNodePtr)elem_ptr, toChar(name)));
1848setAttributeNode(
const Attr& new_attr)
const
1851 ARCANE_UNUSED(new_attr);
1856removeAttributeNode(
const Attr& old_attr)
const
1859 ARCANE_UNUSED(old_attr);
1864getElementsByTagName(
const DOMString& name)
const
1867 ARCANE_UNUSED(name);
1872getAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1875 ARCANE_UNUSED(namespace_uri);
1876 ARCANE_UNUSED(local_name);
1881setAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name,
1882 const DOMString& value)
const
1885 ARCANE_UNUSED(namespace_uri);
1886 ARCANE_UNUSED(local_name);
1887 ARCANE_UNUSED(value);
1892removeAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1895 ARCANE_UNUSED(namespace_uri);
1896 ARCANE_UNUSED(local_name);
1901getAttributeNodeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1904 ARCANE_UNUSED(namespace_uri);
1905 ARCANE_UNUSED(local_name);
1910setAttributeNodeNS(
const Attr& new_attr)
const
1913 new_attr._checkValid();
1918getElementsByTagNameNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1921 ARCANE_UNUSED(namespace_uri);
1922 ARCANE_UNUSED(local_name);
1927hasAttribute(
const DOMString& name)
const
1930 ARCANE_UNUSED(name);
1935hasAttributeNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
1938 ARCANE_UNUSED(namespace_uri);
1939 ARCANE_UNUSED(local_name);
1948splitText(ULong offset)
const
1951 ARCANE_UNUSED(offset);
1963replaceWholeText(
const DOMString& content)
const
1966 ARCANE_UNUSED(content);
1979DocumentType(DocumentTypePrv* prv)
1980:
Node(cvt((xmlNodePtr)impl(prv)))
1982DocumentTypePrv* DocumentType::
1985 return cvt((xmlDocTypePtr)impl(
m_p));
1987DOMString DocumentType::
2008DOMString DocumentType::
2015DOMString DocumentType::
2022DOMString DocumentType::
2023internalSubset()
const
2033NotationPrv* Notation::
2036 return cvt((xmlNotationPtr)impl(
m_p));
2061 return cvt((xmlEntityPtr)impl(
m_p));
2089ProcessingInstruction::
2090ProcessingInstruction()
2093ProcessingInstruction::
2094ProcessingInstruction(ProcessingInstructionPrv* prv)
2095:
Node(cvt((xmlNodePtr)impl(prv)))
2097ProcessingInstructionPrv* ProcessingInstruction::
2100 return cvt((xmlProcessingInstructionPtr)impl(
m_p));
2103DOMString ProcessingInstruction::
2110DOMString ProcessingInstruction::
2117void ProcessingInstruction::
2118data(
const DOMString& value)
const
2121 ARCANE_UNUSED(value);
2134NamedNodeMap(NamedNodeMapPrv* p)
2150NamedNodeMapPrv* NamedNodeMap::
2166 ::xmlNodePtr xnode = (::xmlNodePtr)impl(m_p);
2169 xnode = xnode->next;
2174getNamedItem(
const DOMString& name)
const
2185 ::xmlAttrPtr xattrlist = (::xmlAttrPtr)impl(m_p);
2186 const ::xmlChar* aname = toChar(name);
2187 ::xmlAttrPtr current = xattrlist;
2189 if (current->type == XML_ATTRIBUTE_NODE && current->ns) {
2190 std::string full_name = (
const char*)(current->ns->prefix);
2192 full_name += (
const char*)(current->name);
2193 if (xmlStrEqual(aname, (
const xmlChar*)full_name.c_str()) == 1) {
2194 return cvt((::xmlNodePtr)current);
2197 if (xmlStrEqual(aname, current->name) == 1) {
2198 return cvt((::xmlNodePtr)current);
2200 current = current->next;
2205setNamedItem(
const Node& arg)
const
2207 if (_null() || arg._null())
2213removeNamedItem(
const DOMString& name)
const
2217 ARCANE_UNUSED(name);
2222item(ULong index)
const
2227 ::xmlNodePtr xnode = (::xmlNodePtr)impl(m_p);
2230 return Node(cvt(xnode));
2232 xnode = xnode->next;
2237getNamedItemNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
2241 ARCANE_UNUSED(namespace_uri);
2242 ARCANE_UNUSED(local_name);
2247setNamedItemNS(
const Node& arg)
const
2257removeNamedItemNS(
const DOMString& namespace_uri,
const DOMString& local_name)
const
2261 ARCANE_UNUSED(namespace_uri);
2262 ARCANE_UNUSED(local_name);
2271getDOMImplementation(
const DOMString& features)
const
2273 ARCANE_UNUSED(features);
2274 throw NotImplementedException(A_FUNCINFO);
2280void UserDataHandler::
2281handle(UShort operation,
const DOMString& key,
const DOMObject& data,
2282 const Node& src,
const Node& dest)
const
2284 ARCANE_UNUSED(operation);
2286 ARCANE_UNUSED(data);
2288 ARCANE_UNUSED(dest);
2289 throw NotImplementedException(A_FUNCINFO);
2300DOMWriter(DOMWriterPrv* p)
2329DOMWriterPrv* DOMWriter::
2336writeNode(
const Node& node)
const
2338 ARCANE_UNUSED(node);
2339 throw NotImplementedException(A_FUNCINFO);
2343encoding(
const String& encoding)
2346 ARCANE_UNUSED(encoding);
2347 throw NotImplementedException(A_FUNCINFO);
2354 throw NotImplementedException(A_FUNCINFO);
2365DOMError(DOMErrorPrv* p)
2394DOMErrorPrv* DOMError::
2415relatedException()
const
2432bool DOMErrorHandler::
2433handleError(
const DOMError& error)
const
2435 ARCANE_UNUSED(error);
2436 throw NotImplementedException(A_FUNCINFO);
2447DOMLocator(DOMLocatorPrv* p)
2476DOMLocatorPrv* DOMLocator::
2498DOMString DOMLocator::
2513createExpression(
const DOMString& expression,
2516 ARCANE_UNUSED(expression);
2517 ARCANE_UNUSED(resolver);
2518 throw NotImplementedException(A_FUNCINFO);
2523 throw NotImplementedException(A_FUNCINFO);
2526createNSResolver(
const Node& node_resolver)
const
2528 ARCANE_UNUSED(node_resolver);
2529 throw NotImplementedException(A_FUNCINFO);
2532evaluate(
const DOMString& expression,
const Node& context_node,
2536 ARCANE_UNUSED(expression);
2537 ARCANE_UNUSED(context_node);
2538 ARCANE_UNUSED(resolver);
2539 ARCANE_UNUSED(type);
2540 ARCANE_UNUSED(result);
2541 throw NotImplementedException(A_FUNCINFO);
2545 const Node& context_node, UShort type,
2548 ARCANE_UNUSED(expression);
2549 ARCANE_UNUSED(context_node);
2550 ARCANE_UNUSED(type);
2551 ARCANE_UNUSED(result);
2552 throw NotImplementedException(A_FUNCINFO);
2558DOMString XPathNSResolver::
2559lookupNamespaceURI(
const DOMString& prefix)
const
2561 ARCANE_UNUSED(prefix);
2562 throw NotImplementedException(A_FUNCINFO);
2571 throw NotImplementedException(A_FUNCINFO);
2576 throw NotImplementedException(A_FUNCINFO);
2578DOMString XPathResult::
2581 throw NotImplementedException(A_FUNCINFO);
2586 throw NotImplementedException(A_FUNCINFO);
2589singleNodeValue()
const
2591 throw NotImplementedException(A_FUNCINFO);
2594getSetIterator(
bool ordered)
const
2596 ARCANE_UNUSED(ordered);
2597 throw NotImplementedException(A_FUNCINFO);
2600getSetSnapshot(
bool ordered)
const
2602 ARCANE_UNUSED(ordered);
2603 throw NotImplementedException(A_FUNCINFO);
2609Node XPathSetIterator::
2612 throw NotImplementedException(A_FUNCINFO);
2618ULong XPathSetSnapshot::
2621 throw NotImplementedException(A_FUNCINFO);
2623Node XPathSetSnapshot::
2624item(ULong index)
const
2626 ARCANE_UNUSED(index);
2627 throw NotImplementedException(A_FUNCINFO);
2636 throw NotImplementedException(A_FUNCINFO);
2642void DOMImplementation::
2657void DOMImplementation::
2662 ::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.