Przykłady te opisują, w jaki sposób można z aplikacji PROMOTIC
odczytać konkretne wartości lub parametry z pliku XML przy pomocy metody
CreateObject poprzez
Microsoft.XMLDOM.
Przykład na wytworzenie (
zapis) pliku XML tutaj brak. Można to wykonać przy pomocy metod obiektu
Microsoft.XMLDOM ale w wielu przypadkach jest dalece prostszym wytwarzanie pliku XML jako plik tekstowy przy pomocy metody
Pm.FileTextWrite (cały tekst XML zostanie najpierw wytworzony w zmiennej typu
String) lub
Pm.FileTextReplace (przykład pliku XML zostanie tylko przepisany wraz ze zmianą słów kluczowych).
XmlData:
Wytwórz przykładowy plik o nazwie "XmlData.xml" o takiej zawartości:
<?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>
Plik tekstowy XML zapisz na przykład na
C:\XmlData.xml. Nie zapomnij zapisać plik w formacie
Unicode UTF-8. Na przykład w oprogramowaniu
Notepad (notatnik) wybierz "Zapisz jako" oraz tutaj zmień kodowanie na
UTF-8.
Skrypty zamieszczone w następujących przyładach zakomponuj do aplikacji PROMOTIC.
Po uruchomieniu aplikacji oraz wykonaniu skryptu wynik opracowania dokumentu XML zostanie wyświetlony w
pozycji Debug INFO systemu.
Wspólna część skryptu:
To jest wspólna część skryptu ważna we wszystkich przykładach
JavaScriptVBScriptWybierz oraz skopiuj do schowka
var oXml, b, arrNodes, i, lastNode, oAttr;
oXml = Pm.AxGetObject("new", "Microsoft.XMLDOM");
oXml.async = false;
// Wymóc synchroniczny odczyt pliku
b = oXml.load("C:\\XmlData.xml");
// Podłączenie/odczyt pliku XML
// Pm.Debug("XMLDOM = " + b); // Sprawdzenie wytworzenia ActiveX obiektu
// Pm.Debug(oXml, true); // Wyświetli dostępne metody
// Pm.Debug(oXml.readyState); // Wyświetli stan podłączenia: 0=uninitialized, 1=loading, 2=loaded, 3=interactive, 4=complete
// Pm.MessageBox("xml text", oXml.xml, 0); // Wyświetli zawartość strony
Dim oXml, b, arrNodes, i, lastNode, oAttr
Set oXml = CreateObject("Microsoft.XMLDOM")
oXml.async = false
' Wymóc synchroniczny odczyt pliku
b = oXml.load("C:\XmlData.xml")
' Podłączenie/odczyt pliku XML
' Pm.Debug "XMLDOM = " & b ' Sprawdzenie wytworzenia ActiveX obiektu
' Pm.Debug oXml, true ' Wyświetli dostępne metody
' Pm.Debug oXml.readyState ' Wyświetli stan podłączenia: 0=uninitialized, 1=loading, 2=loaded, 3=interactive, 4=complete
' Pm.MessageBox "xml text", oXml.xml, &H0 ' Wyświetli zawartość strony
1. Przykład:
Przykład odczyta tablicę wszystkich tagów, które są wżłobione do struktury
pm/data/item dokumentu XML. Następnie w pętli przechodzi wszystkie tagi
<item>, z których do
INFO systemu przy pomocy metody
Debug wypisze teksty zawierające tagi
<name> oraz
<value>
JavaScriptVBScriptWybierz oraz skopiuj do schowka
arrNodes = oXml.selectNodes("//pm/data/item");
// tablica wymaganych tagów
lastNode = arrNodes.length -1;
// całkowita ilość tagów
// zapis wszystkich wartości tablicy "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")
' tablica wymaganych tagów
lastNode = arrNodes.length -1
' całkowita ilość tagów
' zapis wszystkich wartości tablicy "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
Równiaż można zastosować taki zapis:
JavaScriptVBScriptWybierz oraz skopiuj do schowka
arrNodes = oXml.getElementsByTagName("item");
// tablica wymaganych tagów
lastNode = arrNodes.length -1;
// całkowita ilość tagów
// zapis wszystkich wartości tablicy "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")
' tablica wymaganych tagów
lastNode = arrNodes.length -1
' całkowita ilość tagów
' zapis wszystkich wartości tablicy "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. Przykład:
Przykład wczyta tablicę wszystkich tagów, które są wżłobione do struktury
pm/data/item/name dokumentu XML. Następnie w pętli przechodzi wszystkie tagi
<name> z których do
INFO systemu przy pomocy metody
Debug wypisze nazwę oraz wartość atrybutu.
JavaScriptVBScriptWybierz oraz skopiuj do schowka
arrNodes = oXml.selectNodes("//pm/data/item/name");
// tablica wymaganych tagów
lastNode = arrNodes.length -1;
// całkowita ilość tagów
// zapis wszystkich wartości tablicy "arrNodes"
for (i = 0; i <= lastNode; i++)
{
oAttr = arrNodes.item(i).attributes.item(0);
// obiekt oAttr zawiera wszystkie atrybuty tagu <name>
Pm.Debug(oAttr.baseName);
// nazwa atrybutu
Pm.Debug(oAttr.nodeValue);
// wartość atrybutu
}
Set arrNodes = oXml.selectNodes("//pm/data/item/name")
' tablica wymaganych tagów
lastNode = arrNodes.length -1
' całkowita ilość tagów
' zapis wszystkich wartości tablicy "arrNodes"
For i = 0 To lastNode
Set oAttr = arrNodes.item(i).attributes.item(0)
' obiekt oAttr zawiera wszystkie atrybuty tagu <name>
Pm.Debug oAttr.baseName
' nazwa atrybutu
Pm.Debug oAttr.nodeValue
' wartość atrybutu
Next
3. Przykład:
Przykład odnadzie
pierwszą obecność tagu
<name> w dokumencie XML, który posiada atrybut
ID="P" i przy pomocy metody
Debug wypisze wartość tekstową tagu.
JavaScriptVBScriptWybierz oraz skopiuj do schowka
// wartość pierwszego tagu <name>, który posiada atrybut ID="P"
var oNode = oXml.selectSingleNode("//pm/data/item/name[@ID='P']");
Pm.Debug(oNode.text);
' wartość pierwszego tagu <name>, który posiada atrybut ID="P"
Dim oNode
Set oNode = oXml.selectSingleNode("//pm/data/item/name[@ID='P']")
Pm.Debug oNode.text
4. Przykład:
Wypisze wartość atrybutu ID każdego tagu <name> w dokumencie XML
JavaScriptVBScriptWybierz oraz skopiuj do schowka
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