Common.XmlQuery - Anwendung in F-Script

Beispiel 1

Adressdaten in einer xml-Datei (Adresse.xml) mit "sprechender" Struktur.
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
  <Adresse>
    <Name>
      <Vorname>Oskar</Vorname>
      <Nachname>Petermann</Nachname>
    </Name>
    <Kommunikation>
      <Mobile>079 123 45 67</Mobile>
    </Kommunikation>
    <Anschrift>
      <Strasse>Schattenstrasse</Strasse>
      <Nummer>222</Nummer>
      <PLZ>3800</PLZ>
      <Ort>Interlaken</Ort>
    </Anschrift>
  </Adresse>
  <Adresse>
    <Name>
      <Vorname>Anton</Vorname>
      <Nachname>Hürlimann</Nachname>
    </Name>
    <Kommunikation>
      <Mobile>078 222 33 44</Mobile>
    </Kommunikation>
    <Anschrift>
      <Strasse>Baumstrasse</Strasse>
      <Nummer>111</Nummer>
      <PLZ>3800</PLZ>
      <Ort>Interlaken</Ort>
    </Anschrift>
  </Adresse>
</Adressen>
Beim Ausführen von Common.XmlQuery werden in diesem Beispiel folgende drei Argumente verwendet:
  • SourceFile
  • Rows
  • Column (sieben Mal um alle xml-Tags auszugeben)
SourceFile=Adresse.xml
Rows=//Adresse
Column=Vorname,Name/Vorname
Column=Name,Name/Nachname
Column=Strasse,Anschrift/Strasse
Column=Nr,Anschrift/Nummer
Column=Postleitzahl,Anschrift/PLZ
Column=Ort,Anschrift/Ort
Column=Handynummer,Kommunikation/Mobile
Rows: XPath auf die Rows (also die Adress-Datensätze) welche sich im xml-Knoten "Adresse" befinden.
Column: Bei den Column Argumenten wird zuerst das Label gesetzt, danach (getrennd durch ein Komma) folgt der relative XPath auf die xml-Knoten welche die entsprechenden Werte enthalten.
Beispiel eines F-Script welches die obige xml-Datei liest und in Form eines XFAS zurückgibt:
/headerreport
«XSER(reqXmlQuery:Common.XmlQuery)»
#
«XSER(reqXmlQuery:addArg=SourceFile=Adresse.xml)»
«XSER(reqXmlQuery:addArg=Rows=//Adresse)»
«XSER(reqXmlQuery:addArg=Column=Vorname,Name/Vorname)»
«XSER(reqXmlQuery:addArg=Column=Name,Name/Nachname)»
«XSER(reqXmlQuery:addArg=Column=Strasse,Anschrift/Strasse)»
«XSER(reqXmlQuery:addArg=Column=Nr,Anschrift/Nummer)»
«XSER(reqXmlQuery:addArg=Column=Postleitzahl,Anschrift/PLZ)»
«XSER(reqXmlQuery:addArg=Column=Ort,Anschrift/Ort)»
«XSER(reqXmlQuery:addArg=Column=Handynummer,Kommunikation/Mobile)»
#
«nXSER(reqXmlQuery:execute>resXmlQuery)\A»
#
# Spaltentitel setzen.
«XFAS(head=Vorname)»
«XFAS(head=Name)»
«XFAS(head=Strasse)»
«XFAS(head=Nr)»
«XFAS(head=Postleitzahl)»
«XFAS(head=Ort)»
«XFAS(head=Handynummer)»
# Loop über alle Rows, es werden die obigen sieben Spalten abgefüllt.
«/XFAS.GenItems»
/

/XFAS.GenItems
# Zähler9 = Rows
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
# Abfüllen der Spalten-Werte
«XFAS(cell=«XRES(resXmlQuery:Vorname,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Name,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Strasse,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Nr,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Postleitzahl,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Ort,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:Handynummer,«NO(9,0)»)»)»
#
«nzNO(9,0)<«XRES(resXmlQuery:rows)\N»\N»«LOOP(9)»
/
Das Resultat (F-Script in LiveDocumentation ausgeführt):
xmlquery_01.jpg

Beispiel 2

Adressdaten in einer xml-Datei mit der Struktur einer Tabelle. Die einzelnen Datensätze (Adressen) sind dabei in "Rows" und "Cells" abgelegt. Die erste "Row" enthält die Spaltentitel.
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
  <Row>
    <Cell>Vorname</Cell>
    <Cell>Nachname</Cell>
    <Cell>Mobile</Cell>
    <Cell>Strasse</Cell>
    <Cell>Nummer</Cell>
    <Cell>PLZ</Cell>
    <Cell>Ort</Cell>
  </Row>
  <Row>
    <Cell>Oskar</Cell>
    <Cell>Petermann</Cell>
    <Cell>079 123 45 67</Cell>
    <Cell>Schattenstrasse</Cell>
    <Cell>222</Cell>
    <Cell>3800</Cell>
    <Cell>Interlaken</Cell>
  </Row>
  <Row>
    <Cell>Anton</Cell>
    <Cell>Hürlimann</Cell>
    <Cell>078 222 33 44</Cell>
    <Cell>Baumstrasse</Cell>
    <Cell>111</Cell>
    <Cell>3800</Cell>
    <Cell>Interlaken</Cell>
  </Row>
</Adressen>
Beim Ausführen von Common.XmlQuery werden in diesem Beispiel folgende vier Argumente verwendet:
  • SourceFile
  • Headers
  • Rows
  • Values
SourceFile=Adresse_2.xml
Headers=//Adressen/Row[1]/Cell
Rows=//Adressen/Row[position()>1]
Values=Cell
Headers: Die Spaltentitel befinden sich in den Cells der ersten Row. Die erste Row wird durch [1] angegeben.
Rows: Die Adressen (Adress-Datensätze) befinden sich in den Rows 2 bis n. Dies wird durch [position()>1] angegeben.
Values: Die Werte befinden sich in den Cells.
Beispiel eines F-Script welches die obige xml-Datei liest und in Form eines XFAS zurückgibt:
/headerreport
«XSER(reqXmlQuery:Common.XmlQuery)»
#
«XSER(reqXmlQuery:addArg=SourceFile=Adresse_2.xml)»
«XSER(reqXmlQuery:addArg=Headers=//Adressen/Row[1]/Cell)»
«XSER(reqXmlQuery:addArg=Rows=//Adressen/Row[position()>1])»
«XSER(reqXmlQuery:addArg=Values=Cell)»
#
«nXSER(reqXmlQuery:execute>resXmlQuery)\A»
#
# Spaltentitel setzen.
«XFAS(head=«XRES(resXmlQuery:col,1)»)»
«XFAS(head=«XRES(resXmlQuery:col,2)»)»
«XFAS(head=«XRES(resXmlQuery:col,3)»)»
«XFAS(head=«XRES(resXmlQuery:col,4)»)»
«XFAS(head=«XRES(resXmlQuery:col,5)»)»
«XFAS(head=«XRES(resXmlQuery:col,6)»)»
«XFAS(head=«XRES(resXmlQuery:col,7)»)»
# Loop über alle Rows, es werden die obigen sieben Spalten abgefüllt.
«/XFAS.GenItems»
/

/XFAS.GenItems
# Zähler9 = Rows
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
# Abfüllen der Spalten-Werte
«XFAS(cell=«XRES(resXmlQuery:1,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:2,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:3,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:4,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:5,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:6,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:7,«NO(9,0)»)»)»
#
«nzNO(9,0)<«XRES(resXmlQuery:rows)\N»\N»«LOOP(9)»
/
Das Resultat (F-Script in LiveDocumentation ausgeführt):
xmlquery_02.jpg

Beispiel 3

Adressdaten in einer xml-Datei mit der Struktur einer Tabelle. Die Werte der einzelnen Datensätze (Adressen) sind dabei in "Columns" und "Cells" abgelegt. Die erste "Cell" einer "Column" enthält jeweils den Spaltentitel.
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
  <Column>
    <Cell>Vorname</Cell>
    <Cell>Oskar</Cell>
    <Cell>Anton</Cell>
  </Column>
  <Column>
    <Cell>Nachname</Cell>
    <Cell>Petermann</Cell>
    <Cell>Hürlimann</Cell>
  </Column>
  <Column>
    <Cell>Mobile</Cell>
    <Cell>079 123 45 67</Cell>
    <Cell>078 222 33 44</Cell>
  </Column>
  <Column>
    <Cell>Strasse</Cell>
    <Cell>Schattenstrasse</Cell>
    <Cell>Baumstrasse</Cell>
  </Column>
  <Column>
    <Cell>Nummer</Cell>
    <Cell>222</Cell>
    <Cell>111</Cell>
  </Column>
  <Column>
    <Cell>PLZ</Cell>
    <Cell>3800</Cell>
    <Cell>3800</Cell>
  </Column>
  <Column>
    <Cell>Ort</Cell>
    <Cell>Interlaken</Cell>
    <Cell>Interlaken</Cell>
  </Column>
</Adressen>
Beim Ausführen von Common.XmlQuery werden in diesem Beispiel folgende vier Argumente verwendet:
  • SourceFile
  • Columns
  • Header
  • Values
SourceFile=Adresse_3.xml
Columns=//Adressen/Column
Header=Cell[1]
Columns: XPath auf die xml-Knoten welche die entsprechenden Werte enthalten.
Header: Die Spaltentitel befinden sich in der Cell der ersten Row einer jeden Column. Die erste Row wird durch [1] angegeben.
Values: Die Werte befinden sich in den Cells der Rows 2 bis n. Dies wird durch [position()>1] angegeben.
Beispiel eines F-Script welches die obige xml-Datei liest und in Form eines XFAS zurückgibt:
/headerreport
«XSER(reqXmlQuery:Common.XmlQuery)»
#
«XSER(reqXmlQuery:addArg=SourceFile=Adresse_3.xml)»
«XSER(reqXmlQuery:addArg=Columns=//Adressen/Column)»
«XSER(reqXmlQuery:addArg=Header=Cell[1])»
«XSER(reqXmlQuery:addArg=Values=Cell[position()>1])»
#
«nXSER(reqXmlQuery:execute>resXmlQuery)\A»
#
# Spaltentitel setzen.
«XFAS(head=«XRES(resXmlQuery:col,1)»)»
«XFAS(head=«XRES(resXmlQuery:col,2)»)»
«XFAS(head=«XRES(resXmlQuery:col,3)»)»
«XFAS(head=«XRES(resXmlQuery:col,4)»)»
«XFAS(head=«XRES(resXmlQuery:col,5)»)»
«XFAS(head=«XRES(resXmlQuery:col,6)»)»
«XFAS(head=«XRES(resXmlQuery:col,7)»)»
# Loop über alle Rows, es werden die obigen sieben Spalten abgefüllt.
«/XFAS.GenItems»
/

/XFAS.GenItems
# Zähler9 = Rows
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
# Abfüllen der Spalten-Werte
«XFAS(cell=«XRES(resXmlQuery:1,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:2,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:3,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:4,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:5,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:6,«NO(9,0)»)»)»
«XFAS(cell=«XRES(resXmlQuery:7,«NO(9,0)»)»)»
#
«nzNO(9,0)<«XRES(resXmlQuery:rows)\N»\N»«LOOP(9)»
/
Das Resultat (F-Script in LiveDocumentation ausgeführt):
xmlquery_03.jpg

Beispiel 4

Adressdaten in einer xml-Datei mit der Struktur einer Tabelle. Die Werte der einzelnen Datensätze (Adressen) sind dabei in "Columns" und "Rows" abgelegt. Die erste "Column" enthält dabei die Titel, jede weitere "Column" enthält dann einen Datensatz (Adresse).
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
  <Column>
    <Row>Vorname</Row>
    <Row>Nachname</Row>
    <Row>Mobile</Row>
    <Row>Strasse</Row>
    <Row>Nummer</Row>
    <Row>PLZ</Row>
    <Row>Ort</Row>
  </Column>
  <Column>
    <Row>Oskar</Row>
    <Row>Petermann</Row>
    <Row>079 123 45 67</Row>
    <Row>Schattenstrasse</Row>
    <Row>222</Row>
    <Row>3800</Row>
    <Row>Interlaken</Row>
  </Column>
  <Column>
    <Row>Anton</Row>
    <Row>Hürlimann</Row>
    <Row>078 222 33 44</Row>
    <Row>Baumstrasse</Row>
    <Row>111</Row>
    <Row>3800</Row>
    <Row>Interlaken</Row>
  </Column>
</Adressen>
Beim Ausführen von Common.XmlQuery werden in diesem Beispiel folgende vier Argumente verwendet:
  • SourceFile
  • Columns
  • Values
SourceFile=Adresse_4.xml
Columns=//Adressen/Column
Values=Row
Columns: XPath auf die xml-Knoten welche die entsprechenden Werte enthalten.
Values: Die Werte befinden sich in jeder Row.
Beispiel eines F-Script welches die obige xml-Datei liest und in Form eines XFAS zurückgibt:
/headerreport
«XSER(reqXmlQuery:Common.XmlQuery)»
#
«XSER(reqXmlQuery:addArg=SourceFile=Adresse_4.xml)»
«XSER(reqXmlQuery:addArg=Columns=//Adressen/Column)»
«XSER(reqXmlQuery:addArg=Values=Row)»
#
«nXSER(reqXmlQuery:execute>resXmlQuery)\A»
#
# Spaltentitel werden hier entweder keine gesetzt, oder mit Buchstaben/Zahlen.
# Da nicht in jedem Fall bekannt ist wie viele Datensätze (Columns) in der xml-Datei enthalten sind,
# wird hier mit einem Repeat/Loop gearbeitet.
# Zähler8 = Columns
«nNO(8,NULL)»
«REPEAT(8)»
«nNO(8)»
«XFAS(head=Column_«NO(8,0)»)»
«nzNO(8,0)<«XRES(resXmlQuery:cols)\N»\N»«LOOP(8)»
# Loop über alle Resultat-Rows.
«/XFAS.GenItems»
/

/XFAS.GenItems
# Hier müssen zwei Repeat/Loops verschachtelt werden.
# Erster Loop: Werte pro Spalte.
# Zweiter Loop: Spalten.
#
# Zähler9 = Rows
«nNO(9,NULL)»
«REPEAT(9)»
«nNO(9)»
# Zähler8 = Columns
«nNO(8,NULL)»
«REPEAT(8)»
«nNO(8)»
# Abfüllen der Spalten-Werte
«XFAS(cell=«XRES(resXmlQuery:«NO(8,0)»,«NO(9,0)»)»)»
#
«nzNO(8,0)<«XRES(resXmlQuery:cols)\N»\N»«LOOP(8)»
«nzNO(9,0)<«XRES(resXmlQuery:rows)\N»\N»«LOOP(9)»
/
Das Resultat (F-Script in LiveDocumentation ausgeführt):
xmlquery_04.jpg