TSDuck v3.40-4034
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::xml::Element Class Reference

Structured element in an XML document. More...

#include <tsxmlElement.h>

Inheritance diagram for ts::xml::Element:
Collaboration diagram for ts::xml::Element:

Public Member Functions

 Element (const Element &other)
 Copy constructor.
 
 Element (Node *parent, const UString &name, CaseSensitivity attributeCase=CASE_INSENSITIVE, bool last=true)
 Constructor.
 
 Element (Report &report=(ts::NullReport::Instance()), size_t line=0, CaseSensitivity attributeCase=CASE_INSENSITIVE)
 Constructor.
 
ElementaddElement (const UString &childName)
 Add a new child element at the end of children.
 
TextaddHexaText (const ByteBlock &data, bool onlyNotEmpty=false)
 Add a new text containing hexadecimal data inside this node.
 
TextaddHexaText (const void *data, size_t size, bool onlyNotEmpty=false)
 Add a new text containing hexadecimal data inside this node.
 
TextaddHexaTextChild (const UString &name, const ByteBlock &data, bool onlyNotEmpty=false)
 Add a new child element containing an hexadecimal data text.
 
TextaddHexaTextChild (const UString &name, const void *data, size_t size, bool onlyNotEmpty=false)
 Add a new child element containing an hexadecimal data text.
 
TextaddText (const UString &text, bool onlyNotEmpty=false)
 Add a new text inside this node.
 
const Attributeattribute (const UString &attributeName, bool silent=false) const
 Get an attribute.
 
size_t childrenCount () const
 Get the number of children.
 
virtual void clear () override
 Clear the content of the node.
 
virtual Nodeclone () const override
 Clone the content of the node in a dynamically allocated object.
 
UString debug () const
 Build a debug string for the node.
 
void deleteAttribute (const UString &name)
 Delete an attribute.
 
size_t depth () const
 Get the depth of an XML element.
 
Documentdocument ()
 Get the document into which the node is located.
 
const Documentdocument () const
 Get the document into which the node is located.
 
ElementfindFirstChild (const UString &name, bool silent=false)
 Find the first child element by name, case-insensitive.
 
const ElementfindFirstChild (const UString &name, bool silent=false) const
 Find the first child element by name, case-insensitive.
 
NodefirstChild ()
 Get the first child of a node.
 
const NodefirstChild () const
 Get the first child of a node.
 
ElementfirstChildElement ()
 Get the first child Element of a node.
 
const ElementfirstChildElement () const
 Get the first child Element of a node.
 
bool getAttribute (UString &value, const UString &name, bool required=false, const UString &defValue=UString(), size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get a string attribute of an XML element.
 
void getAttributes (std::map< UString, UString > &attr) const
 Get the list of all attributes.
 
size_t getAttributesCount () const
 Get the number of attributes in the element.
 
void getAttributesNames (UStringList &names) const
 Get the list of all attribute names.
 
void getAttributesNamesInModificationOrder (UStringList &names) const
 Get the list of all attribute names, sorted by modification order.
 
bool getBoolAttribute (bool &value, const UString &name, bool required=false, bool defValue=false) const
 Get a boolean attribute of an XML element.
 
bool getChildren (ElementVector &children, const UString &name, size_t minCount=0, size_t maxCount=UNLIMITED) const
 Find all children elements by name, case-insensitive.
 
template<class Rep , class Period >
bool getChronoAttribute (cn::duration< Rep, Period > &value, const UString &name, bool required=false, const cn::duration< Rep, Period > &defValue=cn::duration< Rep, Period >::zero(), const cn::duration< Rep, Period > &minValue=cn::duration< Rep, Period >::min(), const cn::duration< Rep, Period > &maxValue=cn::duration< Rep, Period >::max()) const
 Get a std::chrono::duration attribute of an XML element.
 
template<typename INT , typename INT1 = INT, typename INT2 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2>
bool getConditionalIntAttribute (std::optional< INT > &value, const UString &name, bool condition, INT1 minValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::min(), INT2 maxValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::max()) const
 Get an integer or enum attribute of an XML element, based on a condition.
 
bool getDateAttribute (Time &value, const UString &name, bool required=false, const Time &defValue=Time()) const
 Get a date (without hours) attribute of an XML element.
 
bool getDateTimeAttribute (Time &value, const UString &name, bool required=false, const Time &defValue=Time()) const
 Get a date/time attribute of an XML element.
 
template<typename INT , typename INT1 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1>
bool getEnumAttribute (INT &value, const Enumeration &definition, const UString &name, bool required=false, INT1 defValue=INT(0)) const
 Get an enumeration attribute of an XML element.
 
template<typename INT , typename INT1 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1>
bool getEnumAttribute (std::optional< INT > &value, const Enumeration &definition, const UString &name, bool required=false, INT1 defValue=INT(0)) const
 Get an enumeration attribute of an XML element.
 
template<typename FLT , typename FLT1 = FLT, typename FLT2 = FLT, typename FLT3 = FLT>
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2> && std::is_arithmetic_v<FLT3>
bool getFloatAttribute (FLT &value, const UString &name, bool required=false, FLT1 defValue=static_cast< FLT >(0.0), FLT2 minValue=std::numeric_limits< FLT >::lowest(), FLT3 maxValue=std::numeric_limits< FLT >::max()) const
 Get a floating-point attribute of an XML element.
 
bool getHexaText (ByteBlock &data, size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get and interpret the hexadecimal data inside the element.
 
bool getHexaTextChild (ByteBlock &data, const UString &name, bool required=false, size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get text in a child containing hexadecimal data.
 
template<typename INT , typename INT1 = INT, typename INT2 = INT, typename INT3 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2> && ts::int_enum<INT3>
bool getIntAttribute (INT &value, const UString &name, bool required=false, INT1 defValue=static_cast< INT >(0), INT2 minValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::min(), INT3 maxValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::max()) const
 Get an integer or enum attribute of an XML element.
 
template<typename INT , typename INT1 = INT, typename INT2 = INT, typename INT3 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2> && ts::int_enum<INT3>
bool getIntAttribute (std::optional< INT > &value, const UString &name, bool required=false, INT1 defValue=static_cast< INT >(0), INT2 minValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::min(), INT3 maxValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::max()) const
 Get an integer or enum attribute of an XML element.
 
bool getIPAttribute (IPAddress &value, const UString &name, bool required=false, const IPAddress &defValue=IPAddress()) const
 Get an IPv4 or IPv6 address attribute of an XML element in numerical format or host name.
 
bool getMACAttribute (MACAddress &value, const UString &name, bool required=false, const MACAddress &defValue=MACAddress()) const
 Get a MAC address attribute of an XML element in "x:x:x:x:x:x" format.
 
bool getOptionalAttribute (std::optional< UString > &value, const UString &name, size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get an optional string attribute of an XML element.
 
bool getOptionalBoolAttribute (std::optional< bool > &value, const UString &name) const
 Get an optional boolean attribute of an XML element.
 
bool getOptionalDateAttribute (std::optional< Time > &value, const UString &name) const
 Get an optional date (without hours) attribute of an XML element.
 
bool getOptionalDateTimeAttribute (std::optional< Time > &value, const UString &name) const
 Get an optional date/time attribute of an XML element.
 
template<typename INT >
requires ts::int_enum<INT>
bool getOptionalEnumAttribute (std::optional< INT > &value, const Enumeration &definition, const UString &name) const
 Get an optional enumeration attribute of an XML element.
 
template<typename FLT , typename FLT1 = FLT, typename FLT2 = FLT>
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2>
bool getOptionalFloatAttribute (std::optional< FLT > &value, const UString &name, FLT1 minValue=std::numeric_limits< FLT >::lowest(), FLT2 maxValue=std::numeric_limits< FLT >::max()) const
 Get an optional floating-point attribute of an XML element.
 
template<typename INT , typename INT1 = INT, typename INT2 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2>
bool getOptionalIntAttribute (std::optional< INT > &value, const UString &name, INT1 minValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::min(), INT2 maxValue=std::numeric_limits< typename ts::underlying_type< INT >::type >::max()) const
 Get an optional integer or enum attribute of an XML element.
 
template<class Rep , class Period >
bool getOptionalTimeAttribute (std::optional< cn::duration< Rep, Period > > &value, const UString &name) const
 Get an optional time attribute of an XML element in "hh:mm:ss" format.
 
bool getText (UString &data, bool trim=false, size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get text inside an element.
 
bool getTextChild (UString &data, const UString &name, bool trim=false, bool required=false, const UString &defValue=UString(), size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get text in a child of an element.
 
template<class Rep , class Period >
bool getTimeAttribute (cn::duration< Rep, Period > &value, const UString &name, bool required=false) const
 Get a time attribute of an XML element in "hh:mm:ss" format.
 
template<class Rep1 , class Period1 , class Rep2 , class Period2 >
bool getTimeAttribute (cn::duration< Rep1, Period1 > &value, const UString &name, bool required, const cn::duration< Rep2, Period2 > &defValue) const
 Get a time attribute of an XML element in "hh:mm:ss" format.
 
bool getVariableAttribute (std::optional< UString > &value, const UString &name, bool required=false, const UString &defValue=UString(), size_t minSize=0, size_t maxSize=UNLIMITED) const
 Get an optional attribute of an XML element.
 
template<typename FLT , typename FLT1 = FLT, typename FLT2 = FLT, typename FLT3 = FLT>
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2> && std::is_arithmetic_v<FLT3>
bool getVariableFloatAttribute (std::optional< FLT > &value, const UString &name, bool required=false, FLT1 defValue=static_cast< FLT >(0), FLT2 minValue=std::numeric_limits< FLT >::lowest(), FLT3 maxValue=std::numeric_limits< FLT >::max()) const
 Get an optional floating-point attribute of an XML element.
 
bool hasAttribute (const UString &attributeName) const
 Check if an attribute exists in the element.
 
bool hasAttribute (const UString &attributeName, const UString &value, bool similar=false) const
 Check if an attribute exists in the element and has the specified value.
 
bool hasChildElement (const UString &name) const
 Check if the element contains at least 1 named child element, case-insensitive.
 
bool hasChildren () const
 Check if the node has children.
 
bool haveSameName (const Element *other) const
 Check if two XML elements have the same name, case-insensitive.
 
NodelastChild ()
 Get the last child.
 
const NodelastChild () const
 Get the last child.
 
size_t lineNumber () const
 Get the line number in input document.
 
bool merge (Element *other, MergeAttributes attrOptions=MergeAttributes::ADD)
 Recursively merge another element into this one.
 
void move (Node *newSibling, bool before)
 Move the node before or after another node, potentially to a new parent.
 
void moveAfter (Node *newSibling)
 Move the node after another node, potentially to a new parent.
 
void moveBefore (Node *newSibling)
 Move the node before another node, potentially to a new parent.
 
const UStringname () const
 Get the element name.
 
NodenextSibling ()
 Get the next sibling node.
 
const NodenextSibling () const
 Get the next sibling node.
 
ElementnextSiblingElement ()
 Find the next sibling element.
 
const ElementnextSiblingElement () const
 Find the next sibling element.
 
virtual UString oneLiner () const
 Format the value as a one-liner XML text.
 
Nodeparent ()
 Get the parent's node.
 
const Nodeparent () const
 Get the parent's node.
 
const UStringparentName () const
 Get the parent name.
 
bool preserveSpace () const
 Check if the node or one of its ancestors has attribute xml:space="preserve".
 
NodepreviousSibling ()
 Get the previous sibling node.
 
const NodepreviousSibling () const
 Get the previous sibling node.
 
ElementpreviousSiblingElement ()
 Find the previous sibling element.
 
const ElementpreviousSiblingElement () const
 Find the previous sibling element.
 
virtual void print (TextFormatter &output, bool keepNodeOpen=false) const override
 Format the node for an output XML document.
 
virtual void printClose (TextFormatter &output, size_t levels=std::numeric_limits< size_t >::max()) const override
 Print the closing tags for the node.
 
void removeComments (bool recurse)
 Remove all comments in the XML node.
 
void reparent (Node *newParent, bool last=true)
 Attach the node to a new parent.
 
Reportreport () const
 Get a reference to the report object for the XML node.
 
bool ringAlone () const
 Check if the node is alone in its own ring.
 
void ringInsertAfter (RingNode *o)
 Insert this object in a ring after the specified node.
 
void ringInsertBefore (RingNode *o)
 Insert this object in a ring before the specified node.
 
template<typename T >
T * ringNext ()
 Get the next node in the ring.
 
template<typename T >
const T * ringNext () const
 Get the next node in the ring.
 
template<typename T >
T * ringPrevious ()
 Get the previous node in the ring.
 
template<typename T >
const T * ringPrevious () const
 Get the previous node in the ring.
 
void ringRemove ()
 Remove the node from the ring it belongs to and creates its own ring.
 
size_t ringSize () const
 Count the number of element in the ring.
 
void ringSwap (RingNode *o)
 Swap this object and another one in their rings.
 
void setAttribute (const UString &name, const UString &value, bool onlyIfNotEmpty=false)
 Set an attribute.
 
void setBoolAttribute (const UString &name, bool value)
 Set a bool attribute to a node.
 
template<class Rep , class Period >
void setChronoAttribute (const UString &name, cn::duration< Rep, Period > value, bool hexa=false)
 Set an attribute with a std::chrono::duration value to a node.
 
void setDateAttribute (const UString &name, const Time &value)
 Set a date (xithout hours) attribute of an XML element.
 
void setDateTimeAttribute (const UString &name, const Time &value)
 Set a date/time attribute of an XML element.
 
template<typename INT >
requires ts::int_enum<INT>
void setEnumAttribute (const Enumeration &definition, const UString &name, INT value)
 Set an enumeration attribute of a node.
 
template<typename FLT >
requires std::floating_point<FLT>
void setFloatAttribute (const UString &name, FLT value, size_t width=0, size_t precision=6, bool force_sign=false)
 Set an attribute with a floating-point value to a node.
 
template<typename INT >
requires std::integral<INT>
void setIntAttribute (const UString &name, INT value, bool hexa=false)
 Set an attribute with an integer value to a node.
 
void setIPAttribute (const UString &name, const IPAddress &value)
 Set an IPv4 or IPv6 address attribute of an XML element.
 
void setMACAttribute (const UString &name, const MACAddress &value)
 Set a MAC address attribute of an XML element in "x:x:x:x:x:x" format.
 
void setOptionalAttribute (const UString &name, const std::optional< UString > &value)
 Set an optional attribute to a node.
 
void setOptionalBoolAttribute (const UString &name, const std::optional< bool > &value)
 Set an optional bool attribute to a node.
 
void setOptionalDateAttribute (const UString &name, const std::optional< Time > &value)
 Set an optional date (xithout hours) attribute of an XML element.
 
void setOptionalDateTimeAttribute (const UString &name, const std::optional< Time > &value)
 Set an optional date/time attribute of an XML element.
 
template<typename INT >
requires ts::int_enum<INT>
void setOptionalEnumAttribute (const Enumeration &definition, const UString &name, const std::optional< INT > &value)
 Set an optional attribute with an enumeration attribute to a node.
 
template<typename FLT >
requires std::floating_point<FLT>
void setOptionalFloatAttribute (const UString &name, const std::optional< FLT > &value, size_t width=0, size_t precision=6, bool force_sign=false)
 Set an optional attribute with a floating-point value to a node.
 
template<typename INT >
requires std::integral<INT>
void setOptionalIntAttribute (const UString &name, const std::optional< INT > &value, bool hexa=false)
 Set an optional attribute with an integer value to a node.
 
template<class Rep , class Period >
void setOptionalTimeAttribute (const UString &name, const std::optional< cn::duration< Rep, Period > > &value)
 Set an optional time attribute of an XML element in "hh:mm:ss" format.
 
template<class Rep , class Period >
void setTimeAttribute (const UString &name, const cn::duration< Rep, Period > &value)
 Set a time attribute of an XML element in "hh:mm:ss" format.
 
void setValue (const UString &value)
 Set the value of the node.
 
void sort (const UString &name=UString())
 Sort children elements by alphabetical order of tag name.
 
virtual bool stickyOutput () const
 Check if the text shall be stuck to other elements in XML output.
 
UString text (bool trim=false) const
 Get text inside an element.
 
virtual const Tweakstweaks () const
 Get a constant reference to the current XML parsing and formatting tweaks for this node.
 
virtual UString typeName () const override
 Return a node type name, mainly for debug purpose.
 
const UStringvalue () const
 Get the value of the node.
 

Protected Member Functions

NodeidentifyNextNode (TextParser &parser)
 Identify the next token in the document.
 
virtual bool parseChildren (TextParser &parser)
 Parse children nodes and add them to the node.
 
virtual bool parseNode (TextParser &parser, const Node *parent) override
 Parse the node.
 
void setPreserveSpace (bool on)
 Called by the subclass when its spaces shall be preserved.
 

Detailed Description

Structured element in an XML document.

Constructor & Destructor Documentation

◆ Element() [1/3]

ts::xml::Element::Element ( Report report = (ts::NullReport::Instance()),
size_t  line = 0,
CaseSensitivity  attributeCase = CASE_INSENSITIVE 
)
explicit

Constructor.

Parameters
[in,out]reportWhere to report errors.
[in]lineLine number in input document.
[in]attributeCaseState if attribute names are stored with case sensitivity.

◆ Element() [2/3]

ts::xml::Element::Element ( Node parent,
const UString name,
CaseSensitivity  attributeCase = CASE_INSENSITIVE,
bool  last = true 
)

Constructor.

Parameters
[in,out]parentThe parent into which the element is added.
[in]nameName of the element.
[in]attributeCaseState if attribute names are stored wit case sensitivity.
[in]lastIf true, the child is added at the end of the list of children. If false, it is added at the beginning.

◆ Element() [3/3]

ts::xml::Element::Element ( const Element other)

Copy constructor.

Parameters
[in]otherOther instance to copy.

Member Function Documentation

◆ name()

const UString & ts::xml::Element::name ( ) const
inline

Get the element name.

This is the same as the node value.

Returns
A constant reference to the element name.

◆ parentName()

const UString & ts::xml::Element::parentName ( ) const

Get the parent name.

This is the same as parent()->name() without error when there is not parent.

Returns
A constant reference to the parent name or to an empty string if there is no parent.

◆ haveSameName()

bool ts::xml::Element::haveSameName ( const Element other) const
inline

Check if two XML elements have the same name, case-insensitive.

Parameters
[in]otherAnother XML element.
Returns
True is this object and other have identical names.

◆ findFirstChild() [1/2]

const Element * ts::xml::Element::findFirstChild ( const UString name,
bool  silent = false 
) const
inline

Find the first child element by name, case-insensitive.

Parameters
[in]nameName of the child element to search. If empty, get the first element.
[in]silentIf true, do not report error.
Returns
Child element address or zero if not found.

◆ findFirstChild() [2/2]

Element * ts::xml::Element::findFirstChild ( const UString name,
bool  silent = false 
)

Find the first child element by name, case-insensitive.

Parameters
[in]nameName of the child element to search. If empty, get the first element.
[in]silentIf true, do not report error.
Returns
Child element address or zero if not found.

◆ getChildren()

bool ts::xml::Element::getChildren ( ElementVector children,
const UString name,
size_t  minCount = 0,
size_t  maxCount = UNLIMITED 
) const

Find all children elements by name, case-insensitive.

Parameters
[out]childrenReturned vector of all children.
[in]nameName of the child element to search.
[in]minCountMinimum required number of elements of that name.
[in]maxCountMaximum allowed number of elements of that name.
Returns
True on success, false on error.

◆ hasChildElement()

bool ts::xml::Element::hasChildElement ( const UString name) const

Check if the element contains at least 1 named child element, case-insensitive.

Parameters
[in]nameName of the child element to search.
Returns
True if present, false if not present.

◆ getTextChild()

bool ts::xml::Element::getTextChild ( UString data,
const UString name,
bool  trim = false,
bool  required = false,
const UString defValue = UString(),
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get text in a child of an element.

Parameters
[out]dataThe content of the text in the child element.
[in]nameName of the child element to search.
[in]trimIf true, remove leading and trailing spaces.
[in]requiredIf true, generate an error if the child element is not found.
[in]defValueDefault value to return if the child element is not present.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ getText()

bool ts::xml::Element::getText ( UString data,
bool  trim = false,
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get text inside an element.

In practice, concatenate the content of all Text children inside the element.

Parameters
[out]dataThe content of the text children.
[in]trimIf true, remove leading and trailing spaces.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ text()

UString ts::xml::Element::text ( bool  trim = false) const

Get text inside an element.

In practice, concatenate the content of all Text children inside the element.

Parameters
[in]trimIf true, remove leading and trailing spaces.
Returns
The content of the text children, empty if non-existent.

◆ getHexaTextChild()

bool ts::xml::Element::getHexaTextChild ( ByteBlock data,
const UString name,
bool  required = false,
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get text in a child containing hexadecimal data.

Parameters
[out]dataThe content of the text in the child element.
[in]nameName of the child element to search.
[in]requiredIf true, generate an error if the child element is not found.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ getHexaText()

bool ts::xml::Element::getHexaText ( ByteBlock data,
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get and interpret the hexadecimal data inside the element.

In practice, concatenate the content of all Text children inside the element and interpret the result as hexadecimal data.

Parameters
[out]dataBuffer receiving the decoded hexadecimal data.
[in]minSizeMinimum size of the returned data.
[in]maxSizeMaximum size of the returned data.
Returns
True on success, false on error.

◆ addElement()

Element * ts::xml::Element::addElement ( const UString childName)

Add a new child element at the end of children.

Parameters
[in]childNameName of new child element to create.
Returns
New child element or null on error.

◆ addText()

Text * ts::xml::Element::addText ( const UString text,
bool  onlyNotEmpty = false 
)

Add a new text inside this node.

Parameters
[in]textText string to add.
[in]onlyNotEmptyWhen true, do not add the text if the string is empty.
Returns
New child element or null on error.

◆ addHexaText() [1/2]

Text * ts::xml::Element::addHexaText ( const void *  data,
size_t  size,
bool  onlyNotEmpty = false 
)

Add a new text containing hexadecimal data inside this node.

Parameters
[in]dataAddress of binary data.
[in]sizeSize in bytes of binary data.
[in]onlyNotEmptyWhen true, do not add the child element if the data is empty.
Returns
New child element or null on error or empty data.

◆ addHexaText() [2/2]

Text * ts::xml::Element::addHexaText ( const ByteBlock data,
bool  onlyNotEmpty = false 
)
inline

Add a new text containing hexadecimal data inside this node.

Parameters
[in]dataBinary data.
[in]onlyNotEmptyWhen true, do not add the child element if the data is empty.
Returns
New child element or null on error or empty data.

◆ addHexaTextChild() [1/2]

Text * ts::xml::Element::addHexaTextChild ( const UString name,
const void *  data,
size_t  size,
bool  onlyNotEmpty = false 
)

Add a new child element containing an hexadecimal data text.

Parameters
[in]nameName of the child element to search.
[in]dataAddress of binary data.
[in]sizeSize in bytes of binary data.
[in]onlyNotEmptyWhen true, do not add the child element if the data is empty.
Returns
New child element or null on error or empty data.

◆ addHexaTextChild() [2/2]

Text * ts::xml::Element::addHexaTextChild ( const UString name,
const ByteBlock data,
bool  onlyNotEmpty = false 
)

Add a new child element containing an hexadecimal data text.

Parameters
[in]nameName of the child element to search.
[in]dataBinary data.
[in]onlyNotEmptyWhen true, do not add the child element if the data is empty.
Returns
New child element or null on error or empty data.

◆ hasAttribute() [1/2]

bool ts::xml::Element::hasAttribute ( const UString attributeName) const

Check if an attribute exists in the element.

Parameters
[in]attributeNameAttribute name.
Returns
True if the attribute exists.

◆ hasAttribute() [2/2]

bool ts::xml::Element::hasAttribute ( const UString attributeName,
const UString value,
bool  similar = false 
) const

Check if an attribute exists in the element and has the specified value.

Parameters
[in]attributeNameAttribute name.
[in]valueExpected value.
[in]similarIf true, the comparison between the actual and expected values is performed case-insensitive and ignoring blanks. If false, a strict comparison is performed.
Returns
True if the attribute exists and has the expected value.

◆ attribute()

const Attribute & ts::xml::Element::attribute ( const UString attributeName,
bool  silent = false 
) const

Get an attribute.

Parameters
[in]attributeNameAttribute name.
[in]silentIf true, do not report error.
Returns
A constant reference to an attribute. If the argument does not exist, the referenced object is marked invalid. The reference is valid as long as the Element object is not modified.

◆ deleteAttribute()

void ts::xml::Element::deleteAttribute ( const UString name)

Delete an attribute.

Parameters
[in]nameAttribute name to delete.

◆ setAttribute()

void ts::xml::Element::setAttribute ( const UString name,
const UString value,
bool  onlyIfNotEmpty = false 
)

Set an attribute.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.
[in]onlyIfNotEmptyWhen true, do not insert the attribute if value is empty.

◆ setOptionalAttribute()

void ts::xml::Element::setOptionalAttribute ( const UString name,
const std::optional< UString > &  value 
)
inline

Set an optional attribute to a node.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setBoolAttribute()

void ts::xml::Element::setBoolAttribute ( const UString name,
bool  value 
)
inline

Set a bool attribute to a node.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setOptionalBoolAttribute()

void ts::xml::Element::setOptionalBoolAttribute ( const UString name,
const std::optional< bool > &  value 
)
inline

Set an optional bool attribute to a node.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setIntAttribute()

template<typename INT >
requires std::integral<INT>
void ts::xml::Element::setIntAttribute ( const UString name,
INT  value,
bool  hexa = false 
)
inline

Set an attribute with an integer value to a node.

Template Parameters
INTAn integer type.
Parameters
[in]nameAttribute name.
[in]valueAttribute value.
[in]hexaIf true, use an hexadecimal representation (0x...).

◆ setOptionalIntAttribute()

template<typename INT >
requires std::integral<INT>
void ts::xml::Element::setOptionalIntAttribute ( const UString name,
const std::optional< INT > &  value,
bool  hexa = false 
)
inline

Set an optional attribute with an integer value to a node.

Template Parameters
INTAn integer type.
Parameters
[in]nameAttribute name.
[in]valueAttribute optional value. If the variable is not set, no attribute is set.
[in]hexaIf true, use an hexadecimal representation (0x...).

◆ setChronoAttribute()

template<class Rep , class Period >
void ts::xml::Element::setChronoAttribute ( const UString name,
cn::duration< Rep, Period >  value,
bool  hexa = false 
)
inline

Set an attribute with a std::chrono::duration value to a node.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.
[in]hexaIf true, use an hexadecimal representation (0x...).

◆ setFloatAttribute()

template<typename FLT >
requires std::floating_point<FLT>
void ts::xml::Element::setFloatAttribute ( const UString name,
FLT  value,
size_t  width = 0,
size_t  precision = 6,
bool  force_sign = false 
)
inline

Set an attribute with a floating-point value to a node.

Template Parameters
FLTA floating-point type.
Parameters
[in]nameAttribute name.
[in]valueAttribute value.
[in]widthWidth of the formatted number, not including the optional prefix and separator.
[in]precisionPrecision to use after the decimal point. Default is 6 digits.
[in]force_signIf true, force a '+' sign for positive values.

◆ setOptionalFloatAttribute()

template<typename FLT >
requires std::floating_point<FLT>
void ts::xml::Element::setOptionalFloatAttribute ( const UString name,
const std::optional< FLT > &  value,
size_t  width = 0,
size_t  precision = 6,
bool  force_sign = false 
)
inline

Set an optional attribute with a floating-point value to a node.

Template Parameters
FLTA floating-point type.
Parameters
[in]nameAttribute name.
[in]valueAttribute optional value. If the variable is not set, no attribute is set.
[in]widthWidth of the formatted number, not including the optional prefix and separator.
[in]precisionPrecision to use after the decimal point. Default is 6 digits.
[in]force_signIf true, force a '+' sign for positive values.

◆ setEnumAttribute()

template<typename INT >
requires ts::int_enum<INT>
void ts::xml::Element::setEnumAttribute ( const Enumeration definition,
const UString name,
INT  value 
)
inline

Set an enumeration attribute of a node.

Template Parameters
INTAn integer or enum type.
Parameters
[in]definitionThe definition of enumeration values.
[in]nameAttribute name.
[in]valueAttribute value.

◆ setOptionalEnumAttribute()

template<typename INT >
requires ts::int_enum<INT>
void ts::xml::Element::setOptionalEnumAttribute ( const Enumeration definition,
const UString name,
const std::optional< INT > &  value 
)
inline

Set an optional attribute with an enumeration attribute to a node.

Template Parameters
INTAn integer or enum type.
Parameters
[in]definitionThe definition of enumeration values.
[in]nameAttribute name.
[in]valueAttribute optional value. If the variable is not set, no attribute is set.

◆ setDateTimeAttribute()

void ts::xml::Element::setDateTimeAttribute ( const UString name,
const Time value 
)
inline

Set a date/time attribute of an XML element.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setOptionalDateTimeAttribute()

void ts::xml::Element::setOptionalDateTimeAttribute ( const UString name,
const std::optional< Time > &  value 
)
inline

Set an optional date/time attribute of an XML element.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setDateAttribute()

void ts::xml::Element::setDateAttribute ( const UString name,
const Time value 
)
inline

Set a date (xithout hours) attribute of an XML element.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setOptionalDateAttribute()

void ts::xml::Element::setOptionalDateAttribute ( const UString name,
const std::optional< Time > &  value 
)
inline

Set an optional date (xithout hours) attribute of an XML element.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setTimeAttribute()

template<class Rep , class Period >
void ts::xml::Element::setTimeAttribute ( const UString name,
const cn::duration< Rep, Period > &  value 
)
inline

Set a time attribute of an XML element in "hh:mm:ss" format.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setOptionalTimeAttribute()

template<class Rep , class Period >
void ts::xml::Element::setOptionalTimeAttribute ( const UString name,
const std::optional< cn::duration< Rep, Period > > &  value 
)
inline

Set an optional time attribute of an XML element in "hh:mm:ss" format.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setIPAttribute()

void ts::xml::Element::setIPAttribute ( const UString name,
const IPAddress value 
)
inline

Set an IPv4 or IPv6 address attribute of an XML element.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ setMACAttribute()

void ts::xml::Element::setMACAttribute ( const UString name,
const MACAddress value 
)
inline

Set a MAC address attribute of an XML element in "x:x:x:x:x:x" format.

Parameters
[in]nameAttribute name.
[in]valueAttribute value.

◆ getAttribute()

bool ts::xml::Element::getAttribute ( UString value,
const UString name,
bool  required = false,
const UString defValue = UString(),
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get a string attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ getOptionalAttribute()

bool ts::xml::Element::getOptionalAttribute ( std::optional< UString > &  value,
const UString name,
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const

Get an optional string attribute of an XML element.

Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]nameName of the attribute.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ getVariableAttribute()

bool ts::xml::Element::getVariableAttribute ( std::optional< UString > &  value,
const UString name,
bool  required = false,
const UString defValue = UString(),
size_t  minSize = 0,
size_t  maxSize = UNLIMITED 
) const
inline

Get an optional attribute of an XML element.

getVariableAttribute() is different from getOptionalAttribute() in the result. With getOptionalAttribute(), if the attribute is missing, the std::optional is unset. With getVariableAttribute(), if the attribute is missing, the std::optional is set with the default value.

Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minSizeMinimum allowed size for the value string.
[in]maxSizeMaximum allowed size for the value string.
Returns
True on success, false on error.

◆ getBoolAttribute()

bool ts::xml::Element::getBoolAttribute ( bool &  value,
const UString name,
bool  required = false,
bool  defValue = false 
) const

Get a boolean attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getOptionalBoolAttribute()

bool ts::xml::Element::getOptionalBoolAttribute ( std::optional< bool > &  value,
const UString name 
) const

Get an optional boolean attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
Returns
True on success, false on error.

◆ getIntAttribute() [1/2]

template<typename INT , typename INT1 , typename INT2 , typename INT3 >
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2> && ts::int_enum<INT3>
bool ts::xml::Element::getIntAttribute ( INT value,
const UString name,
bool  required = false,
INT1  defValue = static_cast<INT>(0),
INT2  minValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::min(),
INT3  maxValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::max() 
) const

Get an integer or enum attribute of an XML element.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getIntAttribute() [2/2]

template<typename INT , typename INT1 = INT, typename INT2 = INT, typename INT3 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2> && ts::int_enum<INT3>
bool ts::xml::Element::getIntAttribute ( std::optional< INT > &  value,
const UString name,
bool  required = false,
INT1  defValue = static_cast<INT>(0),
INT2  minValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::min(),
INT3  maxValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::max() 
) const
inline

Get an integer or enum attribute of an XML element.

Template Parameters
INTAn integer type.
Parameters
[out]valueReturned value of the attribute. Always set, possibly to the default value.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getOptionalIntAttribute()

template<typename INT , typename INT1 , typename INT2 >
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2>
bool ts::xml::Element::getOptionalIntAttribute ( std::optional< INT > &  value,
const UString name,
INT1  minValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::min(),
INT2  maxValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::max() 
) const

Get an optional integer or enum attribute of an XML element.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]nameName of the attribute.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getConditionalIntAttribute()

template<typename INT , typename INT1 , typename INT2 >
requires ts::int_enum<INT> && ts::int_enum<INT1> && ts::int_enum<INT2>
bool ts::xml::Element::getConditionalIntAttribute ( std::optional< INT > &  value,
const UString name,
bool  condition,
INT1  minValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::min(),
INT2  maxValue = std::numeric_limits<typename ts::underlying_type<INT>::type>::max() 
) const

Get an integer or enum attribute of an XML element, based on a condition.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]nameName of the attribute.
[in]conditionIf true, the attribute must be present. If false, the attribute must nbot be present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getEnumAttribute() [1/2]

template<typename INT , typename INT1 >
requires ts::int_enum<INT> && ts::int_enum<INT1>
bool ts::xml::Element::getEnumAttribute ( INT value,
const Enumeration definition,
const UString name,
bool  required = false,
INT1  defValue = INT(0) 
) const

Get an enumeration attribute of an XML element.

Integer literals and integer values are accepted in the attribute.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute.
[in]definitionThe definition of enumeration values.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getEnumAttribute() [2/2]

template<typename INT , typename INT1 = INT>
requires ts::int_enum<INT> && ts::int_enum<INT1>
bool ts::xml::Element::getEnumAttribute ( std::optional< INT > &  value,
const Enumeration definition,
const UString name,
bool  required = false,
INT1  defValue = INT(0) 
) const
inline

Get an enumeration attribute of an XML element.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute. Always set, possibly to the default value.
[in]definitionThe definition of enumeration values.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getOptionalEnumAttribute()

template<typename INT >
requires ts::int_enum<INT>
bool ts::xml::Element::getOptionalEnumAttribute ( std::optional< INT > &  value,
const Enumeration definition,
const UString name 
) const

Get an optional enumeration attribute of an XML element.

Integer literals and integer values are accepted in the attribute.

Template Parameters
INTAn integer or enum type.
Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]definitionThe definition of enumeration values.
[in]nameName of the attribute.
Returns
True on success, false on error.

◆ getFloatAttribute()

template<typename FLT , typename FLT1 , typename FLT2 , typename FLT3 >
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2> && std::is_arithmetic_v<FLT3>
bool ts::xml::Element::getFloatAttribute ( FLT &  value,
const UString name,
bool  required = false,
FLT1  defValue = static_cast<FLT>(0.0),
FLT2  minValue = std::numeric_limits<FLT>::lowest(),
FLT3  maxValue = std::numeric_limits<FLT>::max() 
) const

Get a floating-point attribute of an XML element.

Template Parameters
FLTA floating-point type.
Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getOptionalFloatAttribute()

template<typename FLT , typename FLT1 , typename FLT2 >
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2>
bool ts::xml::Element::getOptionalFloatAttribute ( std::optional< FLT > &  value,
const UString name,
FLT1  minValue = std::numeric_limits<FLT>::lowest(),
FLT2  maxValue = std::numeric_limits<FLT>::max() 
) const

Get an optional floating-point attribute of an XML element.

Template Parameters
FLTA floating-point type.
Parameters
[out]valueReturned value of the attribute. If the attribute is not present, the variable is reset.
[in]nameName of the attribute.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getVariableFloatAttribute()

template<typename FLT , typename FLT1 = FLT, typename FLT2 = FLT, typename FLT3 = FLT>
requires std::floating_point<FLT> && std::is_arithmetic_v<FLT1> && std::is_arithmetic_v<FLT2> && std::is_arithmetic_v<FLT3>
bool ts::xml::Element::getVariableFloatAttribute ( std::optional< FLT > &  value,
const UString name,
bool  required = false,
FLT1  defValue = static_cast<FLT>(0),
FLT2  minValue = std::numeric_limits<FLT>::lowest(),
FLT3  maxValue = std::numeric_limits<FLT>::max() 
) const
inline

Get an optional floating-point attribute of an XML element.

getVariableFloatAttribute() is different from getOptionalFloatAttribute() in the result. With getOptionalFloatAttribute(), if the attribute is missing, the std::optional is unset. With getVariableFloatAttribute(), if the attribute is missing, the std::optional is set with the default value.

Template Parameters
FLTA floating-point type.
Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getChronoAttribute()

template<class Rep , class Period >
bool ts::xml::Element::getChronoAttribute ( cn::duration< Rep, Period > &  value,
const UString name,
bool  required = false,
const cn::duration< Rep, Period > &  defValue = cn::duration<Rep, Period>::zero(),
const cn::duration< Rep, Period > &  minValue = cn::duration<Rep, Period>::min(),
const cn::duration< Rep, Period > &  maxValue = cn::duration<Rep, Period>::max() 
) const

Get a std::chrono::duration attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
[in]minValueMinimum allowed value for the attribute.
[in]maxValueMaximum allowed value for the attribute.
Returns
True on success, false on error.

◆ getDateTimeAttribute()

bool ts::xml::Element::getDateTimeAttribute ( Time value,
const UString name,
bool  required = false,
const Time defValue = Time() 
) const

Get a date/time attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getOptionalDateTimeAttribute()

bool ts::xml::Element::getOptionalDateTimeAttribute ( std::optional< Time > &  value,
const UString name 
) const

Get an optional date/time attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
Returns
True on success, false on error.

◆ getDateAttribute()

bool ts::xml::Element::getDateAttribute ( Time value,
const UString name,
bool  required = false,
const Time defValue = Time() 
) const

Get a date (without hours) attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getOptionalDateAttribute()

bool ts::xml::Element::getOptionalDateAttribute ( std::optional< Time > &  value,
const UString name 
) const

Get an optional date (without hours) attribute of an XML element.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
Returns
True on success, false on error.

◆ getTimeAttribute() [1/2]

template<class Rep , class Period >
bool ts::xml::Element::getTimeAttribute ( cn::duration< Rep, Period > &  value,
const UString name,
bool  required = false 
) const
inline

Get a time attribute of an XML element in "hh:mm:ss" format.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
Returns
True on success, false on error.

◆ getTimeAttribute() [2/2]

template<class Rep1 , class Period1 , class Rep2 , class Period2 >
bool ts::xml::Element::getTimeAttribute ( cn::duration< Rep1, Period1 > &  value,
const UString name,
bool  required,
const cn::duration< Rep2, Period2 > &  defValue 
) const

Get a time attribute of an XML element in "hh:mm:ss" format.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getOptionalTimeAttribute()

template<class Rep , class Period >
bool ts::xml::Element::getOptionalTimeAttribute ( std::optional< cn::duration< Rep, Period > > &  value,
const UString name 
) const

Get an optional time attribute of an XML element in "hh:mm:ss" format.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
Returns
True on success, false on error.

◆ getIPAttribute()

bool ts::xml::Element::getIPAttribute ( IPAddress value,
const UString name,
bool  required = false,
const IPAddress defValue = IPAddress() 
) const

Get an IPv4 or IPv6 address attribute of an XML element in numerical format or host name.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getMACAttribute()

bool ts::xml::Element::getMACAttribute ( MACAddress value,
const UString name,
bool  required = false,
const MACAddress defValue = MACAddress() 
) const

Get a MAC address attribute of an XML element in "x:x:x:x:x:x" format.

Parameters
[out]valueReturned value of the attribute.
[in]nameName of the attribute.
[in]requiredIf true, generate an error if the attribute is not found.
[in]defValueDefault value to return if the attribute is not present.
Returns
True on success, false on error.

◆ getAttributesNames()

void ts::xml::Element::getAttributesNames ( UStringList names) const

Get the list of all attribute names.

Parameters
[out]namesReturned list of all attribute names.

◆ getAttributes()

void ts::xml::Element::getAttributes ( std::map< UString, UString > &  attr) const

Get the list of all attributes.

Parameters
[out]attrReturned map of all attribute names (index in the map) and corresponding values.

◆ getAttributesNamesInModificationOrder()

void ts::xml::Element::getAttributesNamesInModificationOrder ( UStringList names) const

Get the list of all attribute names, sorted by modification order.

The method is slower than getAttributesNames().

Parameters
[out]namesReturned list of all attribute names.

◆ getAttributesCount()

size_t ts::xml::Element::getAttributesCount ( ) const
inline

Get the number of attributes in the element.

Returns
The number of attributes in the element.

◆ merge()

bool ts::xml::Element::merge ( Element other,
MergeAttributes  attrOptions = MergeAttributes::ADD 
)

Recursively merge another element into this one.

Parameters
[in,out]otherAnother element to merge. The other object is destroyed, some of its nodes are reparented into the main object.
[in]attrOptionsWhat to do with attributes when merging nodes with identical tags.
Returns
True on success, false on error.

◆ sort()

void ts::xml::Element::sort ( const UString name = UString())

Sort children elements by alphabetical order of tag name.

Parameters
[in]nameWhen this parameter is not empty, recursively search for elements with that tag name and sort their children elements.

◆ clone()

virtual Node * ts::xml::Element::clone ( ) const
overridevirtual

Clone the content of the node in a dynamically allocated object.

This virtual method must be implemented by subclasses to allocate a object of the right class.

Returns
The address of a new XML node of the same class as this object, same content, same structure.

Implements ts::xml::Node.

◆ clear()

virtual void ts::xml::Element::clear ( )
overridevirtual

Clear the content of the node.

The node becomes empty but remains attached to its parent.

Reimplemented from ts::xml::Node.

◆ typeName()

virtual UString ts::xml::Element::typeName ( ) const
overridevirtual

Return a node type name, mainly for debug purpose.

Returns
Node type name.

Implements ts::xml::Node.

◆ print()

virtual void ts::xml::Element::print ( TextFormatter output,
bool  keepNodeOpen = false 
) const
overridevirtual

Format the node for an output XML document.

Parameters
[in,out]outputThe output object to format the XML document.
[in]keepNodeOpenIf true, keep the node open so that children may be printed later.

Implements ts::xml::Node.

◆ printClose()

virtual void ts::xml::Element::printClose ( TextFormatter output,
size_t  levels = std::numeric_limits< size_t >::max() 
) const
overridevirtual

Print the closing tags for the node.

Typically used after print() when keepNodeOpen was true. The default implementation is to do nothing. Subclasses may replace this.

Parameters
[in,out]outputThe output object to format the XML document.
[in]levelsNumber of levels to close. By default, close the complete document. If zero, no output is produced.

Reimplemented from ts::xml::Node.

◆ parseNode()

virtual bool ts::xml::Element::parseNode ( TextParser parser,
const Node parent 
)
overrideprotectedvirtual

Parse the node.

Parameters
[in,out]parserThe document parser. On input, the current position of the parser after the tag which identified the node ("<?", "<!- -", etc.) On output, it must be after the last character of the node.
[in]parentCandidate parent node, for information only, do not modify. Can be null.
Returns
True on success, false on error.

Implements ts::xml::Node.

◆ lineNumber()

size_t ts::xml::Node::lineNumber ( ) const
inlineinherited

Get the line number in input document.

Returns
The line number in input document, zero if the node was built programmatically.

◆ reparent()

void ts::xml::Node::reparent ( Node newParent,
bool  last = true 
)
inherited

Attach the node to a new parent.

The node is first detached from its previous parent.

Parameters
[in,out]newParentNew parent. If zero, the node becomes orphan. In that case, the node will no longer be freed by its parent and must be explicitly deleted.
[in]lastIf true, the child is added at the end of the list of children. If false, it is added at the beginning.

◆ moveBefore()

void ts::xml::Node::moveBefore ( Node newSibling)
inlineinherited

Move the node before another node, potentially to a new parent.

Parameters
[in,out]newSiblingA new sibling. The node will be moved before this one.

◆ moveAfter()

void ts::xml::Node::moveAfter ( Node newSibling)
inlineinherited

Move the node after another node, potentially to a new parent.

Parameters
[in,out]newSiblingA new sibling. The node will be moved after this one.

◆ move()

void ts::xml::Node::move ( Node newSibling,
bool  before 
)
inherited

Move the node before or after another node, potentially to a new parent.

Parameters
[in,out]newSiblingA new sibling. The node will be moved before or after this one.
[in]beforeIf true, move the node before newSibling, after it otherwise.

◆ parent() [1/2]

const Node * ts::xml::Node::parent ( ) const
inlineinherited

Get the parent's node.

Returns
The parent's node or a null pointer if this is a top-level document.

◆ parent() [2/2]

Node * ts::xml::Node::parent ( )
inlineinherited

Get the parent's node.

Returns
The parent's node or zero if this is a top-level document.

◆ document() [1/2]

const Document * ts::xml::Node::document ( ) const
inlineinherited

Get the document into which the node is located.

Returns
The node's document or zero if there is no document.

◆ document() [2/2]

Document * ts::xml::Node::document ( )
inherited

Get the document into which the node is located.

Returns
The node's document or zero if there is no document.

◆ tweaks()

virtual const Tweaks & ts::xml::Node::tweaks ( ) const
virtualinherited

Get a constant reference to the current XML parsing and formatting tweaks for this node.

Returns
A constant reference to the XML tweaks to apply. When the node is part of a document, get the global tweaks of the document. Otherwise, get the default tweaks.

Reimplemented in ts::xml::Document.

◆ depth()

size_t ts::xml::Node::depth ( ) const
inherited

Get the depth of an XML element.

Returns
The depth of the element, ie. the number of ancestors.

◆ preserveSpace()

bool ts::xml::Node::preserveSpace ( ) const
inherited

Check if the node or one of its ancestors has attribute xml:space="preserve".

Returns
True if spaces shall be preserved.

◆ hasChildren()

bool ts::xml::Node::hasChildren ( ) const
inlineinherited

Check if the node has children.

Returns
True if the node has children.

◆ childrenCount()

size_t ts::xml::Node::childrenCount ( ) const
inlineinherited

Get the number of children.

Returns
The number of children.

◆ firstChild() [1/2]

const Node * ts::xml::Node::firstChild ( ) const
inlineinherited

Get the first child of a node.

Returns
The first child of the node or zero if there is no children.

◆ firstChild() [2/2]

Node * ts::xml::Node::firstChild ( )
inlineinherited

Get the first child of a node.

Returns
The first child of the node or zero if there is no children.

◆ lastChild() [1/2]

const Node * ts::xml::Node::lastChild ( ) const
inlineinherited

Get the last child.

Returns
The last child or zero if there is none.

◆ lastChild() [2/2]

Node * ts::xml::Node::lastChild ( )
inlineinherited

Get the last child.

Returns
The last child or nullptr if there is none.

◆ nextSibling() [1/2]

const Node * ts::xml::Node::nextSibling ( ) const
inlineinherited

Get the next sibling node.

Returns
The next sibling node or zero if the node is the last child.

◆ nextSibling() [2/2]

Node * ts::xml::Node::nextSibling ( )
inherited

Get the next sibling node.

Returns
The next sibling node or zero if the node is the last child.

◆ previousSibling() [1/2]

const Node * ts::xml::Node::previousSibling ( ) const
inlineinherited

Get the previous sibling node.

Returns
The previous sibling node or zero if the node is the first child.

◆ previousSibling() [2/2]

Node * ts::xml::Node::previousSibling ( )
inherited

Get the previous sibling node.

Returns
The previous sibling node or zero if the node is the first child.

◆ firstChildElement() [1/2]

const Element * ts::xml::Node::firstChildElement ( ) const
inlineinherited

Get the first child Element of a node.

Returns
The first child Element of the node or zero if there is no child Element.

◆ firstChildElement() [2/2]

Element * ts::xml::Node::firstChildElement ( )
inherited

Get the first child Element of a node.

Returns
The first child Element of the node or zero if there is no child Element.

◆ nextSiblingElement() [1/2]

const Element * ts::xml::Node::nextSiblingElement ( ) const
inlineinherited

Find the next sibling element.

Returns
Element address or zero if not found.

◆ nextSiblingElement() [2/2]

Element * ts::xml::Node::nextSiblingElement ( )
inherited

Find the next sibling element.

Returns
Element address or zero if not found.

◆ previousSiblingElement() [1/2]

const Element * ts::xml::Node::previousSiblingElement ( ) const
inlineinherited

Find the previous sibling element.

Returns
Element address or zero if not found.

◆ previousSiblingElement() [2/2]

Element * ts::xml::Node::previousSiblingElement ( )
inherited

Find the previous sibling element.

Returns
Element address or zero if not found.

◆ value()

const UString & ts::xml::Node::value ( ) const
inlineinherited

Get the value of the node.

The semantic of the value depends on the node subclass:

  • Comment: Content of the comment, without "<!--" and "-->".
  • Declaration: Content of the declaration, without "<?" and "?>".
  • Document: Empty.
  • Element: Name of the element.
  • Text: Text content of the element, including spaces and new-lines.
  • Unknown: Content of the tag, probably an uninterpreted DTD.
Returns
A constant reference to the node value, as a string.

◆ setValue()

void ts::xml::Node::setValue ( const UString value)
inlineinherited

Set the value of the node.

Parameters
[in]valueNew value to set.
See also
value()

◆ removeComments()

void ts::xml::Node::removeComments ( bool  recurse)
inherited

Remove all comments in the XML node.

Parameters
[in]recurseIf true, apply recursively to all children nodes.

◆ oneLiner()

virtual UString ts::xml::Node::oneLiner ( ) const
virtualinherited

Format the value as a one-liner XML text.

Returns
The formatted one-line XML text.

◆ stickyOutput()

virtual bool ts::xml::Node::stickyOutput ( ) const
virtualinherited

Check if the text shall be stuck to other elements in XML output.

Returns
True if the text shall be stuck to other elements. False by default.

Reimplemented in ts::xml::Text.

◆ debug()

UString ts::xml::Node::debug ( ) const
inherited

Build a debug string for the node.

Returns
A debug string for the node.

◆ report()

Report & ts::xml::Node::report ( ) const
inlineinherited

Get a reference to the report object for the XML node.

Returns
A reference to the report object for the XML node.

◆ identifyNextNode()

Node * ts::xml::Node::identifyNextNode ( TextParser parser)
protectedinherited

Identify the next token in the document.

Parameters
[in,out]parserThe document parser.
Returns
A new node or zero either at end of document or before a "</" sequence. The returned node, when not zero, is not yet linked to its parent and siblings. When the returned node is not zero, the parser is located after the tag which identified the node ("<?", "<!- -", etc.)

◆ parseChildren()

virtual bool ts::xml::Node::parseChildren ( TextParser parser)
protectedvirtualinherited

Parse children nodes and add them to the node.

Stop either at end of document or before a "</" sequence or on error.

Parameters
[in,out]parserThe document parser.
Returns
True on success, false on error.

◆ setPreserveSpace()

void ts::xml::Node::setPreserveSpace ( bool  on)
inlineprotectedinherited

Called by the subclass when its spaces shall be preserved.

Typically called when xml:space="preserve" is encountered.

Parameters
[in]onTrue is spaces shall be preserved.

◆ ringAlone()

bool ts::RingNode::ringAlone ( ) const
inlineinherited

Check if the node is alone in its own ring.

Returns
True if the node is alone in its own ring.

◆ ringInsertAfter()

void ts::RingNode::ringInsertAfter ( RingNode o)
inherited

Insert this object in a ring after the specified node.

Parameters
[in]oA node of a ring. This object is inserted after o in the ring.

◆ ringInsertBefore()

void ts::RingNode::ringInsertBefore ( RingNode o)
inherited

Insert this object in a ring before the specified node.

Parameters
[in]oA node of a ring. This object is inserted before o in the ring.

◆ ringSwap()

void ts::RingNode::ringSwap ( RingNode o)
inherited

Swap this object and another one in their rings.

If the two objects belong to the same ring, their positions are swapped. If they belong to distinct rings, they also move to each other's ring.

Parameters
[in]oThe node to swap with.

◆ ringNext() [1/2]

template<typename T >
T * ts::RingNode::ringNext ( )
inlineinherited

Get the next node in the ring.

Template Parameters
TA superclass of RingNode, the expected type of the next object in the ring.
Returns
Address of the next node in the ring or zero if the next node is not a subclass of T.

◆ ringNext() [2/2]

template<typename T >
const T * ts::RingNode::ringNext ( ) const
inlineinherited

Get the next node in the ring.

Template Parameters
TA superclass of RingNode, the expected type of the next object in the ring.
Returns
Address of the next node in the ring or zero if the next node is not a subclass of T.

◆ ringPrevious() [1/2]

template<typename T >
T * ts::RingNode::ringPrevious ( )
inlineinherited

Get the previous node in the ring.

Template Parameters
TA superclass of RingNode, the expected type of the previous object in the ring.
Returns
Address of the previous node in the ring or zero if the previous node is not a subclass of T.

◆ ringPrevious() [2/2]

template<typename T >
const T * ts::RingNode::ringPrevious ( ) const
inlineinherited

Get the previous node in the ring.

Template Parameters
TA superclass of RingNode, the expected type of the previous object in the ring.
Returns
Address of the previous node in the ring or zero if the previous node is not a subclass of T.

◆ ringSize()

size_t ts::RingNode::ringSize ( ) const
inherited

Count the number of element in the ring.

Warning: This method has a linear response time, avoid using it when possible.

Returns
The number of nodes in the ring.

The documentation for this class was generated from the following file: