@@ -221,16 +221,18 @@ class XmlElement(XmlElementReader, XmlElementWriter, Generic[NativeElement]):
221221 NativeElementInner = TypeVar ('NativeElementInner' )
222222
223223 class State (Generic [NativeElementInner ]):
224- __slots__ = ('text' , 'attrib' , 'elements' , 'next_element_idx' )
224+ __slots__ = ('text' , 'tail' , ' attrib' , 'elements' , 'next_element_idx' )
225225
226226 def __init__ (
227227 self ,
228228 text : Optional [str ],
229+ tail : Optional [str ],
229230 attrib : Optional [Dict [str , str ]],
230231 elements : List ['XmlElement[XmlElement.NativeElementInner]' ],
231232 next_element_idx : int ,
232233 ):
233234 self .text = text
235+ self .tail = tail
234236 self .attrib = attrib
235237 self .elements = elements
236238 self .next_element_idx = next_element_idx
@@ -259,6 +261,7 @@ def __init__(
259261 self ,
260262 tag : str ,
261263 text : Optional [str ] = None ,
264+ tail : Optional [str ] = None ,
262265 attributes : Optional [Dict [str , str ]] = None ,
263266 elements : Optional [List ['XmlElement[NativeElement]' ]] = None ,
264267 nsmap : Optional [NsMap ] = None ,
@@ -267,6 +270,7 @@ def __init__(
267270 self ._nsmap = nsmap
268271 self ._state = XmlElement .State (
269272 text = text ,
273+ tail = tail ,
270274 attrib = dict (attributes ) if attributes is not None else None ,
271275 elements = elements or [],
272276 next_element_idx = 0 ,
@@ -280,6 +284,7 @@ def create_snapshot(self) -> 'XmlElement[NativeElement]':
280284 element = self .__class__ (
281285 tag = self ._tag ,
282286 text = self ._state .text ,
287+ tail = self ._state .tail ,
283288 attributes = dict (self ._state .attrib ) if self ._state .attrib is not None else None ,
284289 elements = [element .create_snapshot () for element in self ._state .elements ],
285290 nsmap = dict (self ._nsmap ) if self ._nsmap is not None else None ,
@@ -292,12 +297,13 @@ def apply_snapshot(self, snapshot: 'XmlElement[NativeElement]') -> None:
292297 self ._tag = snapshot ._tag
293298 self ._nsmap = snapshot ._nsmap
294299 self ._state .text = snapshot ._state .text
300+ self ._state .tail = snapshot ._state .tail
295301 self ._state .attrib = snapshot ._state .attrib
296302 self ._state .elements = snapshot ._state .elements
297303 self ._state .next_element_idx = snapshot ._state .next_element_idx
298304
299305 def is_empty (self ) -> bool :
300- if not self ._state .text and not self ._state .attrib and len (self ._state .elements ) == 0 :
306+ if not self ._state .text and not self ._state .tail and not self . _state . attrib and len (self ._state .elements ) == 0 :
301307 return True
302308 else :
303309 return False
@@ -379,6 +385,9 @@ def get_unbound(self, path: Tuple[str, ...] = ()) -> List[Tuple[Tuple[str, ...],
379385 if self ._state .text and (text := self ._state .text .strip ()):
380386 result .append ((path , text ))
381387
388+ if self ._state .tail and (tail := self ._state .tail .strip ()):
389+ result .append ((path , tail ))
390+
382391 if attrs := self ._state .attrib :
383392 for name , value in attrs .items ():
384393 result .append ((path + (f'@{ name } ' ,), value ))
0 commit comments