Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Jak číst v aplikaci obecné XML soubory

Tyto příklady popisují jak lze z aplikace PROMOTIC načíst konkrétní hodnoty nebo parametry z XML souboru pomocí metody CreateObject přes Microsoft.XMLDOM.

Příklad na vytvoření (zápis) XML souboru zde není. Lze to také provést metodami nad objektem Microsoft.XMLDOM ale v mnoha případech je daleko jednodušší vytvářet XML soubor jako textový soubor pomocí metody Pm.FileTextWrite (celý XML text se nejdřív vytvoří v proměnné typu String) nebo Pm.FileTextReplace (vzor XML souboru se pouze přepíše se záměnou klíčových slov).

XmlData:
Vytvoříme vzorový soubor s názvem XmlData.xml tohoto obsahu:
<?xml version="1.0" encoding="utf-8"?>
<pm>
  <data>
    <item>
      <name ID="B">d0</name>
      <value>9.381083</value>
    </item>
    <item>
      <name ID="P">d1</name>
      <value>20.34651</value>
    </item>
    <item>
      <name ID="K">d2</name>
      <value>31.1635</value>
    </item>
    <item>
      <name ID="P">d3</name>
      <value>39.94775</value>
    </item>
    <item>
      <name ID="D">d4</name>
      <value>48.76433</value>
    </item>
  </data>
</pm>
Textový XML soubor uložte například na C:\XmlData.xml. Nezapoměňte soubor uložit ve formátu Unicode UTF-8. Například v programu Notepad (poznámkový blok) zvolte "Uložit jako" a zde změňte kódování na UTF-8.
 
Skripty uvedené v následujících příkladech zakomponujte do aplikace PROMOTIC. Po spuštění aplikace a provedení skriptu se výsledky zpracování XML dokumentu zobrazí v Debug_info.
Společná část skriptu:
Toto je společná část skriptu platná pro všechny příklady
Dim oXml, b
Set oXml = CreateObject("Microsoft.XMLDOM")    ' vytvoření ActiveX objektu
oXml.async = false    ' vynutit synchroní načtení souboru
b = oXml.load("c:\XmlData.xml")    ' připojení/načtení XML souboru
'Pm.Debug "ActiveX" & b     ' ověření vytvořeni ActiveX objektu
'Pm.Debug oXml, true    ' zobrazí použitelné metody
'Pm.Debug oXml.readyState   ' zobrazí stav připojení: 0=uninitialized, 1=loading, 2=loaded, 3=interactive, 4=complete
'MsgBox oXml.xml    ' zobrazí obsah stránky
1. Příklad:
Příklad načte pole všech tagů, které jsou vnořeny do struktury pm/data/item XML dokumentu. Následně se ve smyčce prochází všemi tagy <item>, ze kterých do INFO systému pomocí metody Debug vypíše texty obsahující tagy <name> a <value>
Dim arrNodes, i, lastNode
Set arrNodes = oXml.selectNodes("//pm/data/item")    ' pole požadovaných tagů
lastNode = arrNodes.length - 1    ' celkový počet tagů
For i=0 To lastNode    ' zápis všech hodnot pole "arrNodes"
  Pm.Debug i & " tag name = " & arrNodes.Item(i).selectSingleNode("name").Text
  Pm.Debug i & " tag value = " & arrNodes.Item(i).selectSingleNode("value").Text
Next
 
také lze použít tento zápis
 
Dim arrNodes, i, lastNode
Set arrNodes = getElementsByTagName("item")
lastNode = arrNodes.length - 1    
For i=0 To lastNode
  Pm.Debug i & " tag name = " & arrNodes.Item(i).childNodes(0).Text
  Pm.Debug i & " tag value = " & arrNodes.Item(i).childNodes(1).Text
Next
2. Příklad:
Příklad načte pole všech tagů, které jsou vnořeny do struktury pm/data/item/name XML dokumentu. Následně se ve smyčce prochází všemi tagy <name> ze kterých do INFO systému pomocí metody Debug vypíše název a hodnotu atributu.
Dim arrNodes, i, oAttr
Set arrNodes = oXml.selectNodes("//pm/data/item/name")
For i=0 To arrNodes.length - 1
  Set oAttr = arrNodes.Item(i).Attributes.Item(0)    ' objekt oAttr obsahuje všechny atributy tagu "name"
  Pm.Debug oAttr.baseName     ' název atributu
  Pm.Debug oAttr.nodeValue     ' hodnota atributu
Next
3. Příklad:
Příklad najde první výskyt tagu <name> v XML dokumentu, který má atribut ID="P". Pomocí metody Debug vypíše textovou hodnotu tagu.
' hodnota prvního tagu "name", který má atribut ID="P"
Dim oNode
Set oNode = oXml.selectSingleNode("//pm/data/item/name[@ID='P']")
Pm.Debug oNode.Text
4. Příklad:
Pomocí metody Debug vypíše hodnotu atributu ID každého tágu <name> v XML dokumentu.
Dim Dim arrNodes, i
Set arrNodes = getElementsByTagName("name")
For i=0 To arrNodes.length - 1
  Pm.Debug arrNodes.Item(i).getAttribute("ID")
Next
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice