In parsing XML documents, a time may arise where you may need the value or attributes of a specific element. It is possible, as will be shown, to find a specific element in an XML document using 4D 2003 XML commands.
Suppose that the method is named FindXMLElement:
C_STRING(16;$1;$root;$0;$foundNode;$node)
C_TEXT($2;$findName;$nodeName;$foundName)
$root:=$1
$findName:=$2
$node:=""
$foundNode:=""
If ($root#"")
$node:=DOM Get First XML element($root;$nodeName)
While (($nodeName#$findName) & (OK=1))
$nodeName:=""
$foundNode:=FindXMLElement ($node;$findName)
If(OK=0)
$node:=DOM Get Next XML element($node;$nodeName)
Else
$nodeName:=$findName
$node:=$foundNode
End if
End while
End if
$0:=$node
XML documents are organized as a "tree", so a recursive call makes parsing cleaner. However, it may require more stack space than a regular call, so be sure to increase your stack size from the preferences in 4D.
What the above method does is find the first occurrence of an element matching a name and return a reference to it, otherwise, it returns the empty string ("").
Now take the following XML document, called MyXML.xml, for example:
<a>
<d>
</d>
<b>
<e>
<f/>
<c>my name is c</c>
 : </e>
</b>
</a>
Now, you can find an element using the method given above:
$root:=DOM Parse XML source("MyXML.xml")
$node:=FindXMLElement ($root;"c")
DOM GET XML ELEMENT VALUE($node;$value)
The value of $node contains a reference to the element "c" while $value contains its character data value.