Tyto příklady popisují jak lze z aplikace PROMOTIC
načíst konkrétní hodnoty nebo parametry z XML souboru metodou
CreateObject přes
Microsoft.XMLDOM.
Příklad na vytvoření (
zápis) XML souboru zde není. Lze to také provést metodami objektu
Microsoft.XMLDOM ale v mnoha případech je daleko jednodušší vytvářet XML soubor jako textový soubor metodou
Pm.FileTextWrite (celý XML text se nejprve 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řte vzorový soubor s názvem "XmlData.xml" s tímto obsahem:
<?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) vyberte "Uložit jako" a zde změňte kódování na
UTF-8.
Skripty uvedené v následujících příkladech zakomponujte do PROMOTIC aplikace.
Po spuštění aplikace a provedení skriptu se výsledek zpracování XML dokumentu zobrazí v
položce Debug INFO systému.
Společná část skriptu:
Toto je společná část skriptu platná pro všechny příklady
JavaScriptVBScriptVyber a zkopíruj do schránky
var oXml, b, arrNodes, i, lastNode, oAttr;
oXml = Pm.AxGetObject("new", "Microsoft.XMLDOM");
oXml.async = false;
// Vynutit synchroní načtení souboru
b = oXml.load("C:\\XmlData.xml");
// Připojení/načtení XML souboru
// Pm.Debug("XMLDOM = " + b); // Ověření vytvoření 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
// Pm.MessageBox("xml text", oXml.xml, 0); // Zobrazí obsah stránky
Dim oXml, b, arrNodes, i, lastNode, oAttr
Set oXml = CreateObject("Microsoft.XMLDOM")
oXml.async = false
' Vynutit synchroní načtení souboru
b = oXml.load("C:\XmlData.xml")
' Připojení/načtení XML souboru
' Pm.Debug "XMLDOM = " & b ' Ověření vytvoření 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
' Pm.MessageBox "xml text", oXml.xml, &H0 ' 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 metodou
Debug vypíše texty obsahující tagy
<name> a
<value>
JavaScriptVBScriptVyber a zkopíruj do schránky
arrNodes = oXml.selectNodes("//pm/data/item");
// pole požadovaných tagů
lastNode = arrNodes.length -1;
// celkový počet tagů
// zápis všech hodnot pole "arrNodes"
for (i = 0; i <= lastNode; i++)
{
Pm.Debug(i + " TagName=" + arrNodes.item(i).selectSingleNode("name").text);
Pm.Debug(i + " TagValue=" + arrNodes.item(i).selectSingleNode("value").text);
}
Set arrNodes = oXml.selectNodes("//pm/data/item")
' pole požadovaných tagů
lastNode = arrNodes.length -1
' celkový počet tagů
' zápis všech hodnot pole "arrNodes"
For i = 0 To lastNode
Pm.Debug i & " TagName=" & arrNodes.item(i).selectSingleNode("name").text
Pm.Debug i & " TagValue=" & arrNodes.item(i).selectSingleNode("value").text
Next
Také lze použít tento zápis:
JavaScriptVBScriptVyber a zkopíruj do schránky
arrNodes = oXml.getElementsByTagName("item");
// pole požadovaných tagů
lastNode = arrNodes.length -1;
// celkový počet tagů
// zápis všech hodnot pole "arrNodes"
for (i = 0; i <= lastNode; i++)
{
Pm.Debug(i + " TagName=" + arrNodes.item(i).childNodes(0).text);
Pm.Debug(i + " TagValue=" + arrNodes.item(i).childNodes(1).text);
}
Set arrNodes = oXml.getElementsByTagName("item")
' pole požadovaných tagů
lastNode = arrNodes.length -1
' celkový počet tagů
' zápis všech hodnot pole "arrNodes"
For i = 0 To lastNode
Pm.Debug i & " TagName=" & arrNodes.item(i).childNodes(0).text
Pm.Debug i & " TagValue=" & 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 metodou
Debug vypíše název a hodnotu atributu.
JavaScriptVBScriptVyber a zkopíruj do schránky
arrNodes = oXml.selectNodes("//pm/data/item/name");
// pole požadovaných tagů
lastNode = arrNodes.length -1;
// celkový počet tagů
// zápis všech hodnot pole "arrNodes"
for (i = 0; i <= lastNode; i++)
{
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
}
Set arrNodes = oXml.selectNodes("//pm/data/item/name")
' pole požadovaných tagů
lastNode = arrNodes.length -1
' celkový počet tagů
' zápis všech hodnot pole "arrNodes"
For i = 0 To lastNode
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" a metodou
Debug vypíše textovou hodnotu tagu.
JavaScriptVBScriptVyber a zkopíruj do schránky
// hodnota prvního tagu <name>, který má atribut ID="P"
var oNode = oXml.selectSingleNode("//pm/data/item/name[@ID='P']");
Pm.Debug(oNode.text);
' 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:
Vypíše hodnotu atributu ID každého tagu <name> v XML dokumentu.
JavaScriptVBScriptVyber a zkopíruj do schránky
arrNodes = oXml.getElementsByTagName("name");
lastNode = arrNodes.length -1;
for (i = 0; i <= lastNode; i++)
{
Pm.Debug(arrNodes.item(i).getAttribute("ID"));
}
Set arrNodes = oXml.getElementsByTagName("name")
lastNode = arrNodes.length -1
For i = 0 To lastNode
Pm.Debug arrNodes.item(i).getAttribute("ID")
Next