PC SOFT

ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Home | Sign in | English EN
  • Syntax 1: Browsing the elements of XML file on a level
  • Syntax 2: Browse on a level with copy
  • Syntax 3: Browse in depth
  • Loop through an XMLDocument variable
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Others
Stored procedures
The FOR EACH statement loops through a variable of type xmlReader in various ways:
  • Browse on a level.
  • Browse on a level with copy.
  • Browse in depth.
Remark: The FOR ALL, FOR EACH statements are accepted. The FOR EACH statement will be used in this documentation but it can be replaced with FOR ALL.
Example
< ?xml version="1.0"?>
<aa>
<bb>
Text1

<cc>
</cc>
</bb>
<bb>
<cc>
</cc>
</bb>
</aa>
// Browse on a level
// Reader is the variable corresponding to the XML file
FOR EACH Reader
// Read the start aa and end aa tags
FOR EACH Reader
// Read the start bb, end bb, start bb, end bb tags
FOR EACH Reader
// Read Text1 and the start cc, end cc
// start cc, end cc tags
END
END
END
// Reader is the variable corresponding to the XML file
FOR EACH Reader IN-DEPTH
// Read the start aa, start bb, text1,
// start cc, end cc, end bb, start bb,
// start cc, end cc, end bb, end aa tags
END
Syntax

Browsing the elements of XML file on a level Hide the details

FOR EACH <XML Reader>
      FOR EACH <XML Reader>
    ...
      END
END
<FOR EACH>:
Marks the beginning of the statement block.
Used to browse the children of current level.
<XML Reader>:
xmlReader variable corresponding to the XML file to browse.
Inside the loop, the xmlReader variable points to the current XML element.
Remark: You have the ability to nest browses on the XML reader.

Browse on a level with copy Hide the details

FOR EACH <Element> OF <XML Reader>
       FOR EACH <Element A> OF <Element>
        ...
       END
END
<FOR EACH>:
Marks the beginning of the statement block.
Used to browse the children of current level.
<Element>:
Inside the loop, <Element> points to the current XML element. It can be used to perform a new FOR EACH loop to browse its children.
<XML Reader>:
xmlReader variable corresponding to the XML file to browse.

Browse in depth Hide the details

FOR EACH <XML Reader> IN-DEPTH
      ...
END

FOR EACH <Element> OF <XML Reader> IN-DEPTH
      ...
END
<FOR EACH>:
Marks the beginning of the statement block.
Used to browse the XML treeview in depth: browse the child, then the grandchild, then the child of grandchild until a leaf is reached.
<Element>:
Inside the loop, <Element> points to the current XML element. Used to perform a reading in depth from an element.
<XML Reader>:
xmlReader variable corresponding to the XML file to browse.
Remarks

Syntax 1: Browsing the elements of XML file on a level

This syntax is used to browse the children of current level. Inside the loop, the xmlReader variable points to the current XML element.
You have the ability to nest browses on the xmlReader variable in order to browse the children of element on the level currently browsed.

Syntax 2: Browse on a level with copy

This syntax is used to browse the children of current level. Inside the loop, <Element> points to the current XML element and it is possible to use it to perform another browse on its own children.
Remark: A single browse can be performed on the <Element> variable.

Syntax 3: Browse in depth

This syntax is used to browse the XML treeview in depth, which means the child, then the grandchild, ... until a leaf is reached. When the leaf is reached, the loop goes to the next child.

Loop through an XMLDocument variable

If the XML file is handled via a variable of type XMLDocument, you can loop through the file directly.
For example:
// Use of FOR EACH <xmlNode> OF <xmlNode or xmlDocument>
// ON <Node name> WHERE <CONDITION>
 
// Search for all the rows in the invoice with a VAT of 20
sXML is string=[
<?xml version="1.0" encoding="UTF-8"?>
<INVOICE>
<HEADER>
<CLIENTID>123465</CLIENTID>
<NAME>M. Henry DOUGLAS</NAME>
</HEADER>
<ROWS>
<ROW TYPE="PRODUCT" CODE="CD1" QTY="2" VATTYP="5.5">51</ROW>
<ROW TYPE="PRODUCT" CODE="CD2" QTY="1" VATTYP="20">52</ROW>
<ROW TYPE="PRODUCT" CODE="CD3" QTY="3" VATTYP="5.5">53</ROW>
<ROW TYPE="PRODUCT" CODE="CD4" QTY="1" VATTYP="20">54</ROW>
<ROW TYPE="PRODUCT" CODE="CD5" QTY="1" VATTYP="20">55</ROW>
<ROW TYPE="PRODUCT" CODE="CD6" QTY="1" VATTYP="5.5">56</ROW>
</ROWS>
<TOTALS>
<VAT TYPE="5.5">55</VAT>
<VAT TYPE="20">200</VAT>
<TOTALBT>1000</TOTALBT>
<SHIPCOST>10</SHIPCOST>
</TOTALS>
</INVOICE>
]
 
resultXML is xmlDocument = XMLOpen(sXML, fromString)
IF ErrorOccurred THEN
Error("Unable to open the XML file", ErrorInfo())
RETURN
END
// Loop through "INVOICE.ROWS" only
// on the subnodes with the name "ROW"
// and where the "VATTYP" attribute is set to "20"
FOR EACH RowNode OF resultXML.INVOCE.ROWS
ON ROW where RowNode:VATTYP.Value = "20"
Trace("Item " + RowNode:CODE.Value + " x " + ...
RowNode:QTY.Value+" = " + RowNode.Text)
END
Minimum version required
  • Version 23
This page is also available for…
Comments
Click [Add] to post a comment