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 pomocí metod 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 vytvoří nejprve 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, aNodes, iItm, lastNode, oAttr;
oXml = Pm.AxGetObject("new", "Microsoft.XMLDOM");
oXml.async = false;
// Vynutit synchronní 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, aNodes, iItm, lastNode, oAttr
Set oXml = CreateObject("Microsoft.XMLDOM")
oXml.async = false
' Vynutit synchronní 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 přeč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
var iItm;
aNodes = oXml.selectNodes("//pm/data/item");
// Pole požadovaných tagů
lastNode = aNodes.length - 1;
// Celkový počet tagů
// Zápis všech hodnot pole "aNodes"
for (iItm = 0; iItm <= lastNode; iItm++)
{
Pm.Debug(iItm + " TagName=" + aNodes.item(iItm).selectSingleNode("name").text);
Pm.Debug(iItm + " TagValue=" + aNodes.item(iItm).selectSingleNode("value").text);
}
Dim iItm
Set aNodes = oXml.selectNodes("//pm/data/item")
' Pole požadovaných tagů
lastNode = aNodes.length - 1
' Celkový počet tagů
' Zápis všech hodnot pole "aNodes"
For iItm = 0 To lastNode
Pm.Debug(iItm & " TagName=" & aNodes.item(iItm).selectSingleNode("name").text)
Pm.Debug iItm & " TagValue=" & aNodes.item(iItm).selectSingleNode("value").text
Next
Také lze použít tento zápis:
JavaScriptVBScriptVyber a zkopíruj do schránky
var iItm;
aNodes = oXml.getElementsByTagName("item");
// Pole požadovaných tagů
lastNode = aNodes.length - 1;
// Celkový počet tagů
// Zápis všech hodnot pole "aNodes"
for (iItm = 0; iItm <= lastNode; iItm++)
{
Pm.Debug(iItm + " TagName=" + aNodes.item(iItm).childNodes(0).text);
Pm.Debug(iItm + " TagValue=" + aNodes.item(iItm).childNodes(1).text);
}
Dim iItm
Set aNodes = oXml.getElementsByTagName("item")
' Pole požadovaných tagů
lastNode = aNodes.length - 1
' Celkový počet tagů
' Zápis všech hodnot pole "aNodes"
For iItm = 0 To lastNode
Pm.Debug(iItm & " TagName=" & aNodes.item(iItm).childNodes(0).text)
Pm.Debug iItm & " TagValue=" & aNodes.item(iItm).childNodes(1).text
Next
2. Příklad:
Příklad přeč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
var iItm;
aNodes = oXml.selectNodes("//pm/data/item/name");
// Pole požadovaných tagů
lastNode = aNodes.length - 1;
// Celkový počet tagů
// Zápis všech hodnot pole "aNodes"
for (iItm = 0; iItm <= lastNode; iItm++)
{
oAttr = aNodes.item(iItm).attributes.item(0);
// Objekt oAttr obsahuje všechny atributy tagu <name>
Pm.Debug(oAttr.baseName);
// název atributu
Pm.Debug(oAttr.nodeValue);
// hodnota atributu
}
Dim iItm
Set aNodes = oXml.selectNodes("//pm/data/item/name")
' Pole požadovaných tagů
lastNode = aNodes.length - 1
' Celkový počet tagů
' Zápis všech hodnot pole "aNodes"
For iItm = 0 To lastNode
Set oAttr = aNodes.item(iItm).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
aNodes = oXml.getElementsByTagName("name");
lastNode = aNodes.length - 1;
for (iItm = 0; iItm <= lastNode; iItm++)
{
Pm.Debug(aNodes.item(iItm).getAttribute("ID"));
}
Set aNodes = oXml.getElementsByTagName("name")
lastNode = aNodes.length - 1
For iItm = 0 To lastNode
Pm.Debug aNodes.item(iItm).getAttribute("ID")
Next