Zanurkuj w Pythonie/Tworzenie oddzielnych funkcji obsługi względem typu węzła: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
poprawki
Beau (dyskusja | edycje)
sprzątanie kodu
Linia 1:
== Tworzenie oddzielnych funkcji obsługi względem typu węzła ==
 
Trzecim użytecznym chwytem podczas przetwarzania XML-a jest podzielenie kodu w logiczny sposób na funkcje oparte na typie węzła i nazwie elementu. Parsując dokument przetwarzamy rozmaite typy węzłów, które są reprezentowane przez obiekty Pythona. Poziom główny dokumentu jest bezpośrednio reprezentowany przez obiekt klasy <code>Document</code>. Z kolei <code>Document</code> zawiera jeden lub więcej obiektów klasy <code>Element</code> (reprezentujące znaczniki XML-a), a każdy z nich może zawierać inne obiekty klasy <code>Element</code>, obiekty klasy <code>Text</code> (fragmenty tekstu), czy obiektów <code>Comment</code> (osadzone komentarze w dokumencie). Python pozwala w łatwy sposób napisać funkcję pośredniczącą, która rozdziela logikę dla każdego rodzaju węzła.
 
Linia 25 ⟶ 24:
|10.18|<code>parse</code>, ogólna funkcja pośrednicząca dla węzła XML
|tekst=
<source lang="python">
<pre>
def parse(self, node):
parseMethod = getattr(self, "parse_%s" % node.__class__.__name__) #(1) (2)
parseMethod(node) #(3)
</presource>
 
# Od razu, zauważmy, że konstruujemy dłuższy napis oparty na nazwie klasy przekazanego węzła (jako argument <code>node</code>). Zatem, jeśli przekażemy węzeł <code>Document</code>-u, konstruujemy napis <code>'parse_Document'</code> itd.
Linia 39 ⟶ 38:
|10.19|Funkcje wywoływane przez funkcję pośredniczącą <code>parse</code>
|tekst=
<source lang="python">
<pre>
def parse_Document(self, node): #(1)
self.parse(node.documentElement)
Linia 58 ⟶ 57:
handlerMethod = getattr(self, "do_%s" % node.tagName)
handlerMethod(node)
</presource>
# <code>parse_Document</code> jest wywołany tylko raz, ponieważ jest tylko jeden węzeł klasy <code>Document</code> w dokumencie XML i tylko jeden obiekt klasy <code>Document</code> w przeparsowanej reprezentacji XML-a. Tu po prostu idziemy dalej i parsujemy część główną pliku gramatyki.
# <code>parse_Text</code> jest wywoływany tylko na węzłach reprezentujących fragmenty tekstu. Funkcja wykonuje kilka specjalnych operacji związanych z automatycznym wstawianiem dużej litery na początku słowa pierwszego zdania, ale w innym wypadku po prostu dodaje reprezentowany tekst do listy.
Linia 72 ⟶ 71:
[[../Obsługa argumentów linii poleceń/]]|
}}
{{Podświetl|py}}
</noinclude>