Greetings,
Mam pewien ciekawy problem. Otóż podczas próby odczytania kilku atrybutów jednocześnie z pewnego pliku xml, LocalName wyświetla mi się prawidłowo, lecz rzecz mniej ciekawie ma się w przypadku odczytywania właśnie poszczególnych atrybutów. Poniżej zamieszczam fragment kodu-pętli, która odpowiedzialna jest za wyświetlanie informacji w sposób następujący:
- W ListBoxie wyświetlać ma ona poszczególne LocalName'y elementów potomnych.
- W kilku Editach wyświeltać ma poszczególne Atrybuty elementów potomnych.
for i := 0 to XML.DocumentElement.ChildNodes.Count-1 do
BEGIN
edNazwaWyswietlana.Text:=XML.DocumentElement.ChildNodes[memo1.Itemindex].LocalName;
edNazwaPelna.Text:=XML.DocumentElement.ChildNodes[memo1.Itemindex].Attributes['NP'].Text;
edKonto.Text:=XML.DocumentElement.ChildNodes[memo1.Itemindex].Attributes['konto'].Text;
//Pętla używając Indeksu klikniętego itema w ListBoxie(Memo1), wyszukuje takiego w pliku XML
end;
No i problem polega na tym, iż LocalName'y elementów potomnych wyświetlane są w ListBoxie bez najmniejszych zgrzytów, lecz niestety z atrybutami nie jest tak wesoło. Otrzymuję bardzo nieprzyjemną informację, iż miała miejsce "Invalid Variant Operation". A teraz, żeby było ciekawiej, przedstawię dwa różne sposoby zapisu, które testowałem w pliku XML:
SPOSÓB 1:
<?xml version="1.0" encoding="UTF-8"?>
<Kontrahenci>
<Sample1 NP="Nazwa Pelna Sample1" konto="546541 1548 4444444"/>
</Kontrahenci>
Ten sposób, żeby było śmieszniej, jest odczytywany przez mój program w powyżej przedstawiony sposób BEZPROBLEMOWO.
Natomiast, jeśli zastosuję...
SPOSÓB 2:
<?xml version="1.0" encoding="UTF-8"?>
<Kontrahenci>
<Sample2><NP>Sample 2 Pelna</NP><konto>00 0000 2222222</konto></Sample2>
</Kontrahenci>
... pojawia się problem, który poruszyłem na początku swego Topicu. Oczywiście, sposób zapisu nr 1 jest lepszy, czytelniejszy i zajmuje mniej miejsca. Rzecz w tym, że za żadne skarby nie jestem w stanie użyć takiego formatu programowo, gdyż domyślny parser-komponent z Delphi7 zapisuje wartości w sposób nr 2. Cóż zatem mam zrobić? Zmienić parser czy jest może jakieś inne rozwiązanie?