eerohele / exalt

A Sublime Text plugin for validating and formatting XML documents
MIT License
22 stars 3 forks source link

Shows error for CDATA entries #9

Closed vaibhav-bansal closed 7 years ago

vaibhav-bansal commented 7 years ago

1. Summary

Shows error for CDATA entries but works with #PCDATA

2. Expected Behavior

Should notify "Valid markup".

3. Actual Behavior

Error : "Element lname content does not follow the DTD, expecting (CDATA), got (CDATA)"

4. Code Used

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE name [    <!ELEMENT name (fname,lname)>    <!ELEMENT fname (#PCDATA)>    <!ELEMENT lname (CDATA)> ]>
<name>    <fname>Vaibhav</fname>    <lname>Bansal</lname> </name>

5. Environment

Operating System: Windows 8.1 x64 EN
Sublime Text: Build 3126

Thanks.

eerohele commented 7 years ago

Exalt uses lxml, which in turn uses libxml2.

xmllint (which is the command-line interface to libxml2), gives the same result for your example document:

 /p/tmp $ cat test.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE name [
    <!ELEMENT name (fname,lname)>
    <!ELEMENT fname (#PCDATA)>
    <!ELEMENT lname (CDATA)>
]>

<name>
    <fname>Vaibhav</fname>
    <lname>Bansal</lname>
</name>
 /p/tmp $ xmllint --valid test.xml
test.xml:11: element lname: validity error : Element lname content does not follow the DTD, expecting (CDATA), got (CDATA)
    <lname>Bansal</lname>
                         ^
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE name [
<!ELEMENT name (fname , lname)>
<!ELEMENT fname (#PCDATA)>
<!ELEMENT lname (CDATA)>
]>
<name>
    <fname>Vaibhav</fname>
    <lname>Bansal</lname>
</name>
 /p/tmp $

I'm by no means an expert on DTDs, but this Stack Overflow answer indicates that CDATA is not a valid content model for elements.