@@ -30,11 +30,11 @@ * * @brief A class which stores an XML element. */ @interface OFXMLElement: OFXMLNode { - OFString *_name, *_Nullable _namespace, *_Nullable _defaultNamespace; + OFString *_name, *_Nullable _namespace; OFMutableArray OF_GENERIC(OFXMLAttribute *) *_Nullable _attributes; OFMutableDictionary OF_GENERIC(OFString *, OFString *) *_Nullable _namespaces; OFMutableArray OF_GENERIC(OFXMLNode *) *_Nullable _children; OF_RESERVE_IVARS(OFXMLElement, 4) @@ -53,16 +53,10 @@ #else @property OF_NULLABLE_PROPERTY (copy, nonatomic, getter=namespace, setter=setNamespace:) OFString *nameSpace; #endif -/** - * @brief The default namespace for the element to be used if there is no - * parent. - */ -@property OF_NULLABLE_PROPERTY (copy, nonatomic) OFString *defaultNamespace; - /** * @brief An array with the attributes of the element. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFArray OF_GENERIC(OFXMLAttribute *) *attributes; @@ -120,33 +114,32 @@ */ + (instancetype)elementWithName: (OFString *)name namespace: (nullable OFString *)nameSpace stringValue: (nullable OFString *)stringValue; -/** - * @brief Creates a new element with the specified element. - * - * @param element An OFXMLElement to initialize the OFXMLElement with - * @return A new autoreleased OFXMLElement with the contents of the specified - * element - */ -+ (instancetype)elementWithElement: (OFXMLElement *)element; - /** * @brief Parses the string and returns an OFXMLElement for it. * * @param string The string to parse * @return A new autoreleased OFXMLElement with the contents of the string + * @throw OFMalformedXMLException The XML was malformed + * @throw OFUnboundPrefixException A prefix was used that was not bound to any + * namespace + * @throw OFInvalidEncodingException The XML is not in the encoding it specified */ + (instancetype)elementWithXMLString: (OFString *)string; /** * @brief Parses the specified stream and returns an OFXMLElement for it. * * @param stream The stream to parse * @return A new autoreleased OFXMLElement with the contents of the specified * stream + * @throw OFMalformedXMLException The XML was malformed + * @throw OFUnboundPrefixException A prefix was used that was not bound to any + * namespace + * @throw OFInvalidEncodingException The XML is not in the encoding it specified */ + (instancetype)elementWithStream: (OFStream *)stream; - (instancetype)init OF_UNAVAILABLE; @@ -178,11 +171,12 @@ * @param nameSpace The namespace for the element * @return An initialized OFXMLElement with the specified element name and * namespace */ - (instancetype)initWithName: (OFString *)name - namespace: (nullable OFString *)nameSpace; + namespace: (nullable OFString *)nameSpace + OF_DESIGNATED_INITIALIZER; /** * @brief Initializes an already allocated OFXMLElement with the specified name, * namespace and value. * @@ -194,40 +188,36 @@ */ - (instancetype)initWithName: (OFString *)name namespace: (nullable OFString *)nameSpace stringValue: (nullable OFString *)stringValue; -/** - * @brief Initializes an already allocated OFXMLElement with the specified - * element. - * - * @param element An OFXMLElement to initialize the OFXMLElement with - * @return A new autoreleased OFXMLElement with the contents of the specified - * element - */ -- (instancetype)initWithElement: (OFXMLElement *)element; - /** * @brief Parses the string and initializes an already allocated OFXMLElement * with it. * * @param string The string to parse * @return An initialized OFXMLElement with the contents of the string + * @throw OFMalformedXMLException The XML was malformed + * @throw OFUnboundPrefixException A prefix was used that was not bound to any + * namespace + * @throw OFInvalidEncodingException The XML is not in the encoding it specified */ - (instancetype)initWithXMLString: (OFString *)string; /** * @brief Parses the specified stream and initializes an already allocated * OFXMLElement with it. * * @param stream The stream to parse * @return An initialized OFXMLElement with the contents of the specified stream + * @throw OFMalformedXMLException The XML was malformed + * @throw OFUnboundPrefixException A prefix was used that was not bound to any + * namespace + * @throw OFInvalidEncodingException The XML is not in the encoding it specified */ - (instancetype)initWithStream: (OFStream *)stream; -- (instancetype)initWithSerialization: (OFXMLElement *)element; - /** * @brief Sets a prefix for a namespace. * * @param prefix The prefix for the namespace * @param nameSpace The namespace for which the prefix is set @@ -347,12 +337,12 @@ /** * @brief Removes the child at the specified index. * * @param index The index of the child to remove */ - - (void)removeChildAtIndex: (size_t)index; + /** * @brief Replaces the first child that is equal to the specified OFXMLNode * with the specified node. * * @param child The child to replace @@ -371,12 +361,12 @@ /** * @brief Returns all children that have the specified namespace. * * @return All children that have the specified namespace */ -- (OFArray OF_GENERIC(OFXMLElement *) *)elementsForNamespace: - (nullable OFString *)elementNS; +- (OFArray OF_GENERIC(OFXMLElement *) *) + elementsForNamespace: (nullable OFString *)elementNS; /** * @brief Returns the first child element with the specified name. * * @param elementName The name of the element @@ -388,12 +378,12 @@ * @brief Returns the child elements with the specified name. * * @param elementName The name of the elements * @return The child elements with the specified name */ -- (OFArray OF_GENERIC(OFXMLElement *) *)elementsForName: - (OFString *)elementName; +- (OFArray OF_GENERIC(OFXMLElement *) *) + elementsForName: (OFString *)elementName; /** * @brief Returns the first child element with the specified name and namespace. * * @param elementName The name of the element @@ -411,10 +401,38 @@ * @return The child elements with the specified name and namespace */ - (OFArray OF_GENERIC(OFXMLElement *) *) elementsForName: (OFString *)elementName namespace: (nullable OFString *)elementNS; + +/** + * @brief Returns an OFString representing the OFXMLElement as an XML string + * with the specified indentation per level. + * + * @param indentation The indentation per level + * @return An OFString representing the OFXMLNode as an XML string with + * indentation + * @throw OFUnboundNamespaceException The node uses a namespace that was not + * bound to a prefix in a context where it + * needs a prefix + */ +- (OFString *)XMLStringWithIndentation: (unsigned int)indentation; + +/** + * @brief Returns an OFString representing the OFXMLElement as an XML string + * with the specified default namespace and indentation per level. + * + * @param defaultNS The default namespace + * @param indentation The indentation per level + * @return An OFString representing the OFXMLNode as an XML string with + * indentation + * @throw OFUnboundNamespaceException The node uses a namespace that was not + * bound to a prefix in a context where it + * needs a prefix + */ +- (OFString *)XMLStringWithDefaultNamespace: (OFString *)defaultNS + indentation: (unsigned int)indentation; @end OF_ASSUME_NONNULL_END #import "OFXMLElement+Serialization.h"