Community articleUFLGetAttribute function
Added by IBM contributorIBM on July 26, 2013
Rate this article 1 starsRate this article 2 starsRate this article 3 starsRate this article 4 starsRate this article 5 stars


This function returns the value of an attribute in a node. For example, in the XFDL fragment shown, the mimedata node has an attribute called encoding with the value base64.
   <mimedata encoding="base64"></mimedata>


   r_error UFLGetAttribute(
      formNodeP theNode,
      r_charP theNamespaceURI,
      r_charP theAttribute,
      r_charP *returnPtr


Table 1. Function parameters
theNode formNodePThe node containing the attribute.
theNamespaceURIr_charPThe namespace URI for the attribute. For example:

theAttributer_charPThe local name of the attribute. For example, encoding.
returnPtr r_charP*A pointer to the value of the attribute. If the attribute is empty or does not exist, this is set to NULL.


OK on success or an error code on failure.

Usage details

If you refer to an attribute with a namespace prefix, getAttribute first looks for a complete match, including both prefix and attribute name. If it does not find a match, it will look for a matching attribute name that has no prefix but whose containing element has the same namespace.
For example, assume that the custom namespace and the test namespace both resolve to the same URI. In the following case, looking for the id attribute would locate the second attribute (test:id), since it has an explicit namespace declaration:
   <a xmlns:custom="ABC" xmlns:test="ABC">
      <custom:myElement id="1" test:id="2">

However, in the next case, the id attribute does not have an explicit namespace declaration. Instead, it inherits the custom namespace. However, since the inherited namespace resolves to the same URI, the id attribute is still located:
   <custom:myElement id="1">

Special attributes
Forms generally use three special attributes that are not in an explicitly defined namespace and which require special commands to retrieve.
The first is the default namespace attribute, which looks like this:

To retrieve this attribute, you must use a namespace URI of NULL and the attribute name xmlns.
The second special attribute is a namespace declaration, which looks like this:

To retrieve this sort of attribute, you must use the namespace URI and the appropriate attribute name, such as custom.
Finally, there is the language attribute, which looks like this:

To retrieve this sort of attribute, you must use the namespace URI and the attribute name lang.


The following example shows a shortcut function that gets the value of the encoding attribute for a specific node. A node is passed to the function which then uses UFLGetAttribute to get the value of encoding attribute. This sample function assumes that the attribute is always in the XFDL namespace.
   r_charP getEncodingType(formNodeP theNode)
   r_charP theEncodingType;
   r_error error;
      if ((error = UFLGetAttribute(theNode, 
         "", "encoding", &theEncodingType))
         != OK)
         fprintf(stderr, "Could not retrieve attribute's value.\n.");

Parent topic:
FormNodeP functions