Obiekty XML i XMLList można konwertować na wartości typu String. Podobnie, możliwe jest konwertowanie ciągów znaków na obiekty XML i XMLList. Należy także pamiętać, że wszystkie wartości atrybutów, nazwy i wartości tekstowe XML są ciągami znaków. W poniższej sekcji omówiono wszystkie warianty konwersji typów XML.
Konwertowanie obiektów XML i XMLList na ciągi znaków
Klasy XML i XMLList zawierają metody
toString()
i
toXMLString()
. Metoda
toXMLString()
zwraca ciąg znaków zawierający wszystkie znaczniki, atrybuty, deklaracje przestrzeni nazw i treść obiektu XML. W przypadku obiektów XML z treścią złożoną (elementami podrzędnymi) działanie metody
toString()
jest równoważne działaniu metody
toXMLString()
. W przypadku obiektów XML z prostą treścią (które mogą zawierać tylko jeden element tekstowy) metoda
toString()
zwraca tylko tekstową treść elementu, co ilustruje poniższy przykład:
var myXML:XML =
<order>
<item id='1' quantity='2'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<order>;
trace(myXML.item[0].menuName.toXMLString());
// <menuName>burger</menuName>
trace(myXML.item[0].menuName.toString());
// burger
Użycie metody
trace()
bez wywołania
toString()
lub
toXMLString()
spowoduje domyślne przekonwertowanie danych przy użyciu metody
toString()
, tak jak ilustruje to poniższy kod:
var myXML:XML =
<order>
<item id='1' quantity='2'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<order>;
trace(myXML.item[0].menuName);
// burger
Używając metody
trace()
do debugowania kodu, często korzysta się z metody
toXMLString()
, dzięki czemu metoda
trace()
generuje bardziej kompletne wyniki.
Konwertowanie ciągów znaków na obiekty XML
Konstruktor
new XML()
umożliwia utworzenie obiektu XML z ciągu znaków:
var x:XML = new XML("<a>test</a>");
Próba przekonwertowania na XML ciągu zawierającego niepoprawny kod XML spowoduje zgłoszenie błędu w czasie wykonywania, co ilustruje poniższy przykład:
var x:XML = new XML("<a>test"); // throws an error
Konwertowanie wartości, nazw i wartości tekstowych atrybutów z ciągów znaków
Wszystkie wartości, nazwy i wartości tekstowe atrybutów są ciągami znaków typu String. Niekiedy zachodzi potrzeba przekonwertowania ich na dane innego typu. Na przykład w poniższym kodzie użyto funkcji
Number()
do przekonwertowania wartości tekstowych na liczby:
var myXML:XML =
<order>
<item>
<price>3.95</price>
</item>
<item>
<price>1.00</price>
</item>
</order>;
var total:XML = <total>0</total>;
myXML.appendChild(total);
for each (var item:XML in myXML.item)
{
myXML.total.children()[0] = Number(myXML.total.children()[0])
+ Number(item.price.children()[0]);
}
trace(myXML.total); // 4.95;
Gdyby w kodzie nie użyto funkcji
Number()
, operator + zostałby zinterpretowany jako operator konkatenacji ciągów znaków, a metoda
trace()
wywołana w ostatnim wierszu wyświetliłaby następujący wynik:
01.003.95
|
|
|