On 03/12/2012 23:19, ольга крыжановская wrote:
> Michael, how does nesting work? Can I just take the text of &foo;,
> expand that until I run out of &...; parts and insert the result in
> the text stream?
>
> Olga
No because if you have
<!ENTITY foo "<x>aaa" >
with a replacement text that has a start tag but no close, you can not
flag an error at that point as the document is still well formed if the
entity is not referenced.
<!DOCTYPE x [
<!ENTITY foo "<x>aaa">
]>
<x>
</x>
is OK, but
<!DOCTYPE x [
<!ENTITY foo "<x>aaa">
]>
<x>
&foo;</x>
</x>
is not well formed:
$ rxp -sx bad2.xml
Error: Element ends in different entity from that in which it starts
in unnamed entity at line 5 char 9 of file:///c:/tmp/bad2.xml
However if you just expanded the foo without doing the check, and got
<!DOCTYPE x [
]>
<x>
<x>aaa</x>
</x>
It would, again, be well formed.
So you need to keep track of entity boundaries you can not simply expand
all the entities as macros and then parse the result.
David