If I have a document that looks like this...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DIALOG SYSTEM "VoxML.dtd" [
        <!ENTITY ServletURL 'http://127.0.0.1:8080'>
]>
<DIALOG BARGEIN="N">
        <STEP NAME="init" PARENT="init">
                <PROMPT>Greeting for &ServletURL;</PROMPT>
                <INPUT TYPE="HIDDEN" NAME="Action" 
VALUE="launchEmailApplication"/>
<INPUT TYPE="NONE" NEXT="&ServletURL;/servlet/VoxSurf.Architecture.VoxML.VxsVoxMLApplicationServlet"/>
        </STEP>
</DIALOG>


How do I tell the internal subset apart from the external subset? Normally I'd do...

public void doctypeDecl(String rootElement, String publicId, String systemId, Augmentations augs) throws XNIException {
        if (publicId == null && systemId == null) {
            fProcessingState = PROCESSING_INTERNAL_SUBSET;
            fInternalSubset = new StringBuffer();
        } else {
            fProcessingState = PROCESSING_EXTERNAL_SUBSET;
        }
}

However, in this case, the System Id is not null, so I default to the extenal subset processing state. In the other DTD event methods, I check which state I'm in and only append to the internal subset buffer when I'm in the internal subset processing state. If I build a document from this, the output excludes the <!ENTITY> declaration inside what is, really, the internal subset. Thus, parsing of the resulting document fails because the document references "&ServletURL;", but the <!ENTITY> declaration does not exist.

So, is there some unique condition I can look for while using the XNI parser to determine if I am parsing the internal subset when the external and internal subsets are combined?


Jake


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to