NSXMLElement+XMPP.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #import <Foundation/Foundation.h>
  2. #import "DDXML.h"
  3. NS_ASSUME_NONNULL_BEGIN
  4. @interface NSXMLElement (XMPP)
  5. /**
  6. * Convenience methods for Creating elements.
  7. **/
  8. + (NSXMLElement *)elementWithName:(NSString *)name numberValue:(NSNumber *)number;
  9. - (instancetype)initWithName:(NSString *)name numberValue:(NSNumber *)number;
  10. + (NSXMLElement *)elementWithName:(NSString *)name objectValue:(id)objectValue;
  11. - (instancetype)initWithName:(NSString *)name objectValue:(id)objectValue;
  12. /**
  13. * Creating elements with explicit xmlns values.
  14. *
  15. * Use these instead of [NSXMLElement initWithName:URI:].
  16. * The category methods below are more readable, and they actually work.
  17. **/
  18. + (NSXMLElement *)elementWithName:(NSString *)name xmlns:(NSString *)ns;
  19. - (instancetype)initWithName:(NSString *)name xmlns:(NSString *)ns;
  20. /**
  21. * Extracting multiple elements.
  22. **/
  23. - (NSArray<NSXMLElement*> *)elementsForXmlns:(NSString *)ns;
  24. - (NSArray<NSXMLElement*> *)elementsForXmlnsPrefix:(NSString *)nsPrefix;
  25. /**
  26. * Extracting a single element.
  27. **/
  28. - (nullable NSXMLElement *)elementForName:(NSString *)name NS_REFINED_FOR_SWIFT;
  29. - (nullable NSXMLElement *)elementForName:(NSString *)name xmlns:(NSString *)xmlns NS_REFINED_FOR_SWIFT;
  30. - (nullable NSXMLElement *)elementForName:(NSString *)name xmlnsPrefix:(NSString *)xmlnsPrefix NS_SWIFT_NAME(element(forName:xmlnsPrefix:));
  31. /**
  32. * Convenience methods for removing child elements.
  33. *
  34. * If the element doesn't exist, these methods do nothing.
  35. **/
  36. - (void)removeElementForName:(NSString *)name;
  37. - (void)removeElementsForName:(NSString *)name;
  38. - (void)removeElementForName:(NSString *)name xmlns:(NSString *)xmlns;
  39. - (void)removeElementForName:(NSString *)name xmlnsPrefix:(NSString *)xmlnsPrefix;
  40. /**
  41. * Working with the common xmpp xmlns value.
  42. *
  43. * Use these instead of getting/setting the URI.
  44. * The category methods below are more readable, and they actually work.
  45. **/
  46. @property (nonatomic, readonly, nullable) NSString *xmlns;
  47. - (void)setXmlns:(NSString *)ns;
  48. /**
  49. * Convenience methods for printing xml elements with different styles.
  50. **/
  51. @property (nonatomic, readonly, nullable) NSString *prettyXMLString;
  52. @property (nonatomic, readonly, nullable) NSString *compactXMLString;
  53. /**
  54. * Convenience methods for adding attributes.
  55. **/
  56. - (void)addAttributeWithName:(NSString *)name intValue:(int)intValue;
  57. - (void)addAttributeWithName:(NSString *)name boolValue:(BOOL)boolValue;
  58. - (void)addAttributeWithName:(NSString *)name floatValue:(float)floatValue;
  59. - (void)addAttributeWithName:(NSString *)name doubleValue:(double)doubleValue;
  60. - (void)addAttributeWithName:(NSString *)name integerValue:(NSInteger)integerValue;
  61. - (void)addAttributeWithName:(NSString *)name unsignedIntegerValue:(NSUInteger)unsignedIntegerValue;
  62. - (void)addAttributeWithName:(NSString *)name stringValue:(NSString *)string;
  63. - (void)addAttributeWithName:(NSString *)name numberValue:(NSNumber *)number;
  64. - (void)addAttributeWithName:(NSString *)name objectValue:(id)objectValue;
  65. /**
  66. * Convenience methods for extracting attribute values in different formats.
  67. *
  68. * E.g. <beer name="guinness" price="4.50"/> // float price = [beer attributeFloatValueForName:@"price"];
  69. **/
  70. - (int)attributeIntValueForName:(NSString *)name;
  71. - (BOOL)attributeBoolValueForName:(NSString *)name;
  72. - (float)attributeFloatValueForName:(NSString *)name;
  73. - (double)attributeDoubleValueForName:(NSString *)name;
  74. - (int32_t)attributeInt32ValueForName:(NSString *)name;
  75. - (uint32_t)attributeUInt32ValueForName:(NSString *)name;
  76. - (int64_t)attributeInt64ValueForName:(NSString *)name;
  77. - (uint64_t)attributeUInt64ValueForName:(NSString *)name;
  78. - (NSInteger)attributeIntegerValueForName:(NSString *)name;
  79. - (NSUInteger)attributeUnsignedIntegerValueForName:(NSString *)name;
  80. - (nullable NSString *)attributeStringValueForName:(NSString *)name;
  81. - (nullable NSNumber *)attributeNumberIntValueForName:(NSString *)name;
  82. - (nullable NSNumber *)attributeNumberBoolValueForName:(NSString *)name;
  83. - (nullable NSNumber *)attributeNumberFloatValueForName:(NSString *)name;
  84. - (nullable NSNumber *)attributeNumberDoubleValueForName:(NSString *)name;
  85. - (nullable NSNumber *)attributeNumberInt32ValueForName:(NSString *)name;
  86. - (nullable NSNumber *)attributeNumberUInt32ValueForName:(NSString *)name;
  87. - (nullable NSNumber *)attributeNumberInt64ValueForName:(NSString *)name;
  88. - (nullable NSNumber *)attributeNumberUInt64ValueForName:(NSString *)name;
  89. - (nullable NSNumber *)attributeNumberIntegerValueForName:(NSString *)name;
  90. - (nullable NSNumber *)attributeNumberUnsignedIntegerValueForName:(NSString *)name;
  91. - (int)attributeIntValueForName:(NSString *)name withDefaultValue:(int)defaultValue;
  92. - (BOOL)attributeBoolValueForName:(NSString *)name withDefaultValue:(BOOL)defaultValue;
  93. - (float)attributeFloatValueForName:(NSString *)name withDefaultValue:(float)defaultValue;
  94. - (double)attributeDoubleValueForName:(NSString *)name withDefaultValue:(double)defaultValue;
  95. - (int32_t)attributeInt32ValueForName:(NSString *)name withDefaultValue:(int32_t)defaultValue;
  96. - (uint32_t)attributeUInt32ValueForName:(NSString *)name withDefaultValue:(uint32_t)defaultValue;
  97. - (int64_t)attributeInt64ValueForName:(NSString *)name withDefaultValue:(int64_t)defaultValue;
  98. - (uint64_t)attributeUInt64ValueForName:(NSString *)name withDefaultValue:(uint64_t)defaultValue;
  99. - (NSInteger)attributeIntegerValueForName:(NSString *)name withDefaultValue:(NSInteger)defaultValue;
  100. - (NSUInteger)attributeUnsignedIntegerValueForName:(NSString *)name withDefaultValue:(NSUInteger)defaultValue;
  101. - (NSString *)attributeStringValueForName:(NSString *)name withDefaultValue:(NSString *)defaultValue;
  102. - (NSNumber *)attributeNumberIntValueForName:(NSString *)name withDefaultValue:(int)defaultValue;
  103. - (NSNumber *)attributeNumberBoolValueForName:(NSString *)name withDefaultValue:(BOOL)defaultValue;
  104. @property (nonatomic, readonly) NSMutableDictionary<NSString*,NSString*> *attributesAsDictionary;
  105. /**
  106. * Convenience methods for extracting element values in different formats.
  107. *
  108. * E.g. <price>9.99</price> // float price = [priceElement stringValueAsFloat];
  109. **/
  110. - (int)stringValueAsInt;
  111. - (BOOL)stringValueAsBool;
  112. - (float)stringValueAsFloat;
  113. - (double)stringValueAsDouble;
  114. - (int32_t)stringValueAsInt32;
  115. - (uint32_t)stringValueAsUInt32;
  116. - (int64_t)stringValueAsInt64;
  117. - (uint64_t)stringValueAsUInt64;
  118. - (NSInteger)stringValueAsNSInteger;
  119. - (NSUInteger)stringValueAsNSUInteger;
  120. /**
  121. * Working with namespaces.
  122. **/
  123. - (void)addNamespaceWithPrefix:(NSString *)prefix stringValue:(NSString *)string;
  124. - (nullable NSString *)namespaceStringValueForPrefix:(NSString *)prefix;
  125. - (NSString *)namespaceStringValueForPrefix:(NSString *)prefix withDefaultValue:(NSString *)defaultValue;
  126. @end
  127. NS_ASSUME_NONNULL_END