14#include "arcane/core/XmlNode.h"
16#include "arcane/utils/StringBuilder.h"
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/Iterator.h"
19#include "arcane/utils/ValueConvert.h"
20#include "arcane/utils/Iostream.h"
21#include "arcane/utils/TraceInfo.h"
22#include "arcane/utils/FatalErrorException.h"
24#include "arcane/core/XmlException.h"
25#include "arcane/core/XmlNodeList.h"
26#include "arcane/core/XmlNodeIterator.h"
27#include "arcane/core/DomUtils.h"
45 bool operator()(
const XmlNode& node)
46 {
return node.
name()==m_name; }
125 return static_cast<eType>(m_node.nodeType());
136 return String(m_node.nodeName());
154 if (m_node.nodeType()==dom::Node::ATTRIBUTE_NODE){
158 else if (m_node.nodeType()==dom::Node::ELEMENT_NODE){
160 Integer nb_occurence = 1;
162 if (i.isNamed(
name()))
166 full_name += nb_occurence;
174 if (m_node.nodeType()==dom::Node::ATTRIBUTE_NODE){
192 return m_node.nodeName()==
name;
214 if (m_node.nodeType()==dom::Node::ELEMENT_NODE){
215 domutils::textContent(m_node,v);
228 if (s.
null() && throw_exception){
248attr(
const String& name,
bool throw_exception)
const
250 dom::Element elem(m_node);
254 XmlNode attr_node(m_rm,elem.getAttributeNode(
name));
255 if (throw_exception && attr_node.
null()){
268 dom::Element elem(m_node);
271 dom::Attr
attr = elem.getAttributeNode(
name);
273 attr = elem.ownerDocument().createAttribute(
name);
285 dom::Element elem(m_node);
286 elem.removeAttribute(
name);
311 dom::Node
parent = m_node.parentNode();
314 parent.removeChild(m_node);
323 dom::Node
child = m_node.removeChild(child_node.domNode());
393 if (m_node._null() || new_node.
null() || ref_node.
null())
395 m_node.replaceChild(new_node.domNode(),ref_node.domNode());
402_throwBadConvert(
const char* type_name,
const String& value)
const
423 " Valid values are 'true', 'false', '0' (zero) ou '1'.",
438 if (builtInGetValue(v,
value))
440 _throwBadConvert(
"Integer",
value);
454 if (builtInGetValue(v,
value))
456 _throwBadConvert(
"Int64",
value);
470 if (builtInGetValue(v,
value))
472 _throwBadConvert(
"Real",
value);
481 const String& attr_value)
const
487 if (!i->isNamed(elem_name))
489 name = i->attrValue(attr_name);
490 if (
name==attr_value)
511 return XmlNode(m_rm,domutils::nodeFromXPath(m_node,xpath_expr));
520 if (m_node.nodeType()==dom::Node::ELEMENT_NODE)
521 return domutils::textContent(m_node);
522 return String(m_node.nodeValue());
529assignDomNode(
const dom::Node& node)
540 if (new_child.
null())
548 m_node.insertBefore(new_child.domNode(),
next.domNode());
558 dom::Document doc(m_node);
561 return _build(doc.documentElement());
570 dom::Attr
attr(m_node);
580createElement(
const String& name)
589createAndAppendElement(
const String& name,
const String& value)
600createAndAppendElement(
const String& name)
613 dom::Document doc(m_node);
615 doc = m_node.ownerDocument();
617 String nov = name_or_value;
620 ret_node.assignDomNode(doc.createElement(nov));
623 ret_node.assignDomNode(doc.createTextNode(nov));
627 "createNode() not implemented for node type {0}",(
int)
type);
647 dom::Document doc(m_node);
649 doc = m_node.ownerDocument();
653 ret_node.assignDomNode(doc.createElement(
name));
657 ret_node.assignDomNode(doc.createTextNode(
value));
661 "createNode() not implemented for node type {0}",(
int)
type);
670_build(
const dom::Node& node)
const
695 _setNode(
parent.createAndAppendElement(
name).domNode());
705XmlNodeNameIterator(
const XmlNode& from,
const String& ref_name)
708, m_ref_name (ref_name)
710 _findNextValid(
true);
717XmlNodeNameIterator(
const XmlNode& from,
const char* ref_name)
720, m_ref_name (String(ref_name))
722 _findNextValid(
true);
728void XmlNodeNameIterator::
729_findNextValid(
bool is_init)
732 m_current = m_parent.
front();
734 if (m_current.
null())
738 while (!m_current.
null()){
739 if (m_current.
isNamed(m_ref_name))
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
XmlElement(XmlNode &parent, const String &name, const String &value)
Créé un élément fils de parent. L'élément créé a pour nom name et pour valeur value....
Exception liées aux fichiers XML.
Liste de noeuds d'un arbre DOM.
XmlNode attr(const String &name, bool throw_exception=false) const
Retourne l'attribut de nom name.
XmlNode prevSameType() const
Retourne le noeud précédent ce noeud ayant le même type.
String xpathFullName() const
Nom XPath du noeud avec ces ancêtres.
void setValue(const String &value)
Positionne la valeur du noeud.
XmlNode documentElement() const
Retourne le noeud élément du document.
void replace(const XmlNode &new_node, XmlNode &ref_node)
Remplace le noeud fils ref_node par le noeud new_node.
Int64 valueAsInt64(bool throw_exception=false) const
Valeur du noeud convertie en entier 64 bits. 0 si conversion échoue.
eType type() const
Type du noeud.
iterator end()
Retourne un iterateur sur le premier élément après la fin du tableau.
XmlNode insertAfter(const XmlNode &new_child, const XmlNode &ref_node)
Insère un noeud. Insère le noeud new_child après le noeud ref_node. Si new_child est nul,...
XmlNodeList children() const
Ensemble des noeuds fils de ce noeud.
void removeAttr(const String &name) const
Supprime l'attribut de nom name de ce noeud. Si ce noeud n'est pas élément, rien n'est effectué.
XmlNode prev() const
Noeud précédent (previousSibling())
String attrValue(const String &name, bool throw_exception=false) const
Valeur de l'attribut name.
Real valueAsReal(bool throw_exception=false) const
Valeur du noeud convertie en réel. Si la conversion échoue, si throw_exception vaut false retourne 0....
XmlNode childWithNameAttr(const String &elem_name, const String &attr_value) const
Retourne le fils de ce noeud ayant pour nom elem_name et un attribut de nom "name" avec pour valeur a...
XmlNode child(const String &name) const
Noeud fils de celui-ci de nom name.
void clear()
Supprime tous les noeuds fils.
XmlNode forceAttr(const String &name)
Retourne l'attribut de nom name. Si aucun attribut avec ce nom n'existe, un attribut avec comme valeu...
XmlNode xpathNode(const String &xpath_expr) const
Retourne un noeud à partir d'une expression XPath.
void append(const XmlNode &child_node)
Ajoute child_node comme fils de ce noeud.
String value() const
Valeur du noeud.
XmlNode front() const
Premier fils.
XmlNode createText(const String &value)
Créé un noeud texte.
bool null() const
Vrai si le noeud est nul.
XmlNode next() const
Noeud suivant (nextSibling())
eType
NodeType An integer indicating which type of node this is.
@ TEXT
The node is a Text node.
@ ELEMENT
The node is an Element.
ConstIterT< XmlNode > const_iter
Type d'un itérateur constant sur tout le tableau.
bool isNamed(const String &name) const
Vrai si le nom de l'élément est name.
XmlNode ownerElement() const
Retourne l'élément propriétaire de cet attribut.
XmlNode expectedChild(const String &name) const
Noeud fils de celui-ci de nom name.
XmlNode nextWithName(const String &name) const
Retourne le noeud suivant ce noeud ayant le nom name.
Integer valueAsInteger(bool throw_exception=false) const
Valeur du noeud convertie en entier.
XmlNode parent() const
Parent de ce noeud (null si aucun)
iterator begin()
Retourne un iterateur sur le premier élément du tableau.
XmlNode nextSameType() const
Retourne le noeud suivant ce noeud ayant le même type.
void setAttrValue(const String &name, const String &value)
Positionne l'attribut name à la valeur value.
XmlNode childWithAttr(const String &elem_name, const String &attr_name, const String &attr_value) const
Retourne le fils de ce noeud ayant pour nom elem_name et un attribut de nom attr_name avec pour valeu...
String name() const
Nom du noeud.
bool valueAsBoolean(bool throw_exception=false) const
Valeur du noeud convertie en booléan.
XmlNode createNode(eType type, const String &name, const String &value)
Créé un noeud d'un type donné.
XmlNode prevWithName(const String &name) const
Retourne le noeud précédent ce noeud ayant le nom name.
void remove()
Supprime ce noeud du document.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Constructeur de chaîne de caractère unicode.
StringBuilder & append(const String &str)
Ajoute str.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-