xml_simple

xml_simple wandelt einen gültigen XML-String in ein UniScript-Objekt um.

o = xml_simple(ssXML)

Returnwert

o ist der XML-Tree oder ein Error-Objekt (siehe error_create).

xml_simple("<a>1</a>")
[.
    a = "1"
]
xml_simple("<a b='1'><c>2</c></a>")
[.
    a = [.
        b = "1"
        c = "2"
    ]
]
xml_simple("<a><b>1</b><c>2</c></a>")
[.
    a = [.
        b = "1"
        c = "2"
    ]
]

Parameter

ssXML

ssXML ist ein gültiger XML-String.

Kommentar

XML-Deklarationen am Anfang des Strings werden ignoriert:

.. highlight:: xml
<?xml version=“1.0“ encoding=“UTF-8“ ?>

Der Eingabestring ssXML muss gültige UNICODE-Zeichen enthalten. text_file_read liefert für ANSI- und utf-8 kodierte Textdateien UNICODE-Strings.

Bei der Funktion xml_simple geht die Reihenfolge der Elemente verloren.

Der Aufruf:

xml_simple("<a><b>1</b><c>2</c></a>")

liefert ebenso wie der Aufruf:

xml_simple("<a><c>2</c><b>1</b></a>")

das Objekt:

[.
    a = [.
        b = "1"
        c = "2"
    ]
]

Falls die Reihenfolge wichtig ist, ist die Funktion xml_parse_string besser geeignet.

Falls ein Element mehrere gleiche Kind-Elemente enthält, werden sie in ein Array geschrieben:

s = "[[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<directory>
    <title>Example</title>
    <entry>
        <key>Test 1</key>
        <text>Test 1 ...</text>
    </entry>
    <entry a='Hallo'>
        <key>Test 2</key>
        <text>Test 2 ...</text>
    </entry>
</directory>]]"

o1 = xml_simple(s)
[.
    directory = [.
        entry = [.
            [1] = [.
                key = "Test 1"
                text = "Test 1 ..."
            ]
            [2] = [.
                key = "Test 2"
                text = "Test 2 ..."
            ]
        ]
        title = "Example"
    ]
]

Wenn nur ein entry-Element vorhanden ist, wird kein Vektor erzeugt:

s = "[[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<directory>
    <title>Example</title>
    <entry>
        <key>Test 1</key>
        <text>Test 1 ...</text>
    </entry>
</directory>]]"
o2 = xml_simple(s)
[.
    directory = [.
        entry = [.
            key = "Test 1"
            text = "Test 1 ..."
        ]
        title = "Example"
    ]
]

Mit der Hilfsfunktion xml_simple_get(element) kann immer die Vektor-Schreibweise verwendet werden, unabhängig davon ob das Element 0, 1 oder mehr child-Elemente enthält:

entry = xml_simple_get(o2.directory.entry)  // oder o1.directory.entry
for (i in 1:entry.count_num) {
    print entry[i].text
}

Ein weitere Beispiel:

* xml_simple("<a b = '789'>456</a>")
[.
    a = [.
        #text = "456"
        b = "789"
    ]
]

History

Version Beschreibung
R2014 Neu.

id-1561986