# XML Node Sets **API Group:** `xmlsec_core_nodeset` XML node-set implementation used during transformations. XML nodes set functions. ## Typedefs ### `xmlSecNodeSetWalkCallback` ```c typedef int(* xmlSecNodeSetWalkCallback) (xmlSecNodeSetPtr nset, xmlNodePtr cur, xmlNodePtr parent, void *data))(xmlSecNodeSetPtr nset, xmlNodePtr cur, xmlNodePtr parent, void *data); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L69) Node walk callback, called once per node in the nodes set. The callback function called once per each node in the nodes set. **Parameters:** - `nset` — the pointer to xmlSecNodeSet structure. - `cur` — the pointer current XML node. - `parent` — the pointer to the `cur` parent node. - `data` — the pointer to application specific data. **Returns:** 0 on success or a negative value if an error occurs an walk procedure should be interrupted. --- ## Enumerations ### `xmlSecNodeSetType` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L26) The basic nodes sets types. | Value | Initializer | Description | |-------|-------------|-------------| | `xmlSecNodeSetNormal` | `= 0` | | | `xmlSecNodeSetInvert` | `` | | | `xmlSecNodeSetTree` | `` | | | `xmlSecNodeSetTreeWithoutComments` | `` | | | `xmlSecNodeSetTreeInvert` | `` | | | `xmlSecNodeSetTreeWithoutCommentsInvert` | `` | | | `xmlSecNodeSetList` | `` | | --- ### `xmlSecNodeSetOp` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L39) The simple nodes sets operations. | Value | Initializer | Description | |-------|-------------|-------------| | `xmlSecNodeSetIntersection` | `= 0` | | | `xmlSecNodeSetSubtraction` | `` | | | `xmlSecNodeSetUnion` | `` | | --- ## Functions ### `xmlSecNodeSetCreate` ```c xmlSecNodeSetPtr xmlSecNodeSetCreate(xmlDocPtr doc, xmlNodeSetPtr nodes, xmlSecNodeSetType type); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L74) Creates a new nodes set. Creates new nodes set. Caller is responsible for freeing returned object by calling `xmlSecNodeSetDestroy` function. **Parameters:** - `doc` — the pointer to parent XML document. - `nodes` — the list of nodes. - `type` — the nodes set type. **Returns:** pointer to newly allocated node set or NULL if an error occurs. --- ### `xmlSecNodeSetDestroy` ```c void xmlSecNodeSetDestroy(xmlSecNodeSetPtr nset); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L77) Destroys a nodes set. Destroys the nodes set created with `xmlSecNodeSetCreate` function. **Parameters:** - `nset` — the pointer to node set. --- ### `xmlSecNodeSetDocDestroy` ```c void xmlSecNodeSetDocDestroy(xmlSecNodeSetPtr nset); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L78) Marks node set to destroy the parent document. Instructs node set to destroy nodes parent doc when node set is destroyed. **Parameters:** - `nset` — the pointer to node set. --- ### `xmlSecNodeSetContains` ```c int xmlSecNodeSetContains(xmlSecNodeSetPtr nset, xmlNodePtr node, xmlNodePtr parent); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L79) Checks if a node is in the nodes set. Checks whether the `node` is in the nodes set or not. **Parameters:** - `nset` — the pointer to node set. - `node` — the pointer to XML node to check. - `parent` — the pointer to `node` parent node. **Returns:** 1 if the `node` is in the nodes set `nset`, 0 if it is not and a negative value if an error occurs. --- ### `xmlSecNodeSetAdd` ```c xmlSecNodeSetPtr xmlSecNodeSetAdd(xmlSecNodeSetPtr nset, xmlSecNodeSetPtr newNSet, xmlSecNodeSetOp op); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L82) Adds a nodes set to another with an operation. Adds `newNSet` to the `nset` using operation `op`. **Parameters:** - `nset` — the pointer to current nodes set (or NULL). - `newNSet` — the pointer to new nodes set. - `op` — the operation type. **Returns:** the pointer to combined nodes set or NULL if an error occurs. --- ### `xmlSecNodeSetAddList` ```c xmlSecNodeSetPtr xmlSecNodeSetAddList(xmlSecNodeSetPtr nset, xmlSecNodeSetPtr newNSet, xmlSecNodeSetOp op); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L85) Adds a nodes set as a child list. Adds `newNSet` to the `nset` as child using operation `op`. **Parameters:** - `nset` — the pointer to current nodes set (or NULL). - `newNSet` — the pointer to new nodes set. - `op` — the operation type. **Returns:** the pointer to combined nodes set or NULL if an error occurs. --- ### `xmlSecNodeSetGetChildren` ```c xmlSecNodeSetPtr xmlSecNodeSetGetChildren(xmlDocPtr doc, const xmlNodePtr parent, int withComments, int invert); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L88) Creates a nodes set from parent subtree children. Creates a new nodes set that contains: - if `withComments` is not 0 and `invert` is 0: all nodes in the `parent` subtree; - if `withComments` is 0 and `invert` is 0: all nodes in the `parent` subtree except comment nodes; - if `withComments` is not 0 and `invert` not is 0: all nodes in the `doc` except nodes in the `parent` subtree; - if `withComments` is 0 and `invert` is 0: all nodes in the `doc` except nodes in the `parent` subtree and comment nodes. **Parameters:** - `doc` — the pointer to an XML document. - `parent` — the pointer to parent XML node or NULL if we want to include all document nodes. - `withComments` — the flag include comments or not. - `invert` — the "invert" flag. **Returns:** pointer to the newly created xmlSecNodeSet structure or NULL if an error occurs. --- ### `xmlSecNodeSetWalk` ```c int xmlSecNodeSetWalk(xmlSecNodeSetPtr nset, xmlSecNodeSetWalkCallback walkFunc, void *data); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L92) Walks all nodes in a set calling a callback function. Calls the function `walkFunc` once per each node in the nodes set `nset`. If the `walkFunc` returns a negative value, then the walk procedure is interrupted. **Parameters:** - `nset` — the pointer to node set. - `walkFunc` — the callback functions. - `data` — the application specific data passed to the `walkFunc`. **Returns:** 0 on success or a negative value if an error occurs. --- ### `xmlSecNodeSetDumpTextNodes` ```c int xmlSecNodeSetDumpTextNodes(xmlSecNodeSetPtr nset, xmlOutputBufferPtr out); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L95) Dumps text node content from a nodes set. Dumps content of all the text nodes from `nset` to `out`. **Parameters:** - `nset` — the pointer to node set. - `out` — the output buffer. **Returns:** 0 on success or a negative value otherwise. --- ### `xmlSecNodeSetDebugDump` ```c void xmlSecNodeSetDebugDump(xmlSecNodeSetPtr nset, FILE *output); ``` *Source:* [include/xmlsec/nodeset.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/nodeset.h#L97) Prints information about `nset` to the `output`. **Parameters:** - `nset` — the pointer to node set. - `output` — the pointer to output FILE. ---