Hi,

I read in the Xerces API documentation: 


"entities" 

true [required] Keep EntityReference and Entity nodes in the document. 

false [required] (default) Remove all EntityReference and Entity nodes from
the document, putting the entity expansions directly in their place. Text
nodes are into "normal" form. Only EntityReference nodes to non-defined
entities are kept in the document. 

(http://xerces.apache.org/xerces-c/apiDocs-3/classDOMConfiguration.html) 


Therefore entity reference nodes to undefined entities should be kept in the
document. But try the next program: 


#include <iostream> 
using namespace std; 

#include <xercesc/dom/DOMNode.hpp> 
#include <xercesc/parsers/XercesDOMParser.hpp> 
#include <xercesc/util/PlatformUtils.hpp> 
using namespace xercesc; 

namespace { 
    bool entity_reference_node_found(DOMNode const* const node) 
    { 
        if (DOMNode::ENTITY_REFERENCE_NODE == node->getNodeType()) 
            return true; 
        for (DOMNode const* child = node->getFirstChild(); child; child =
child->getNextSibling()) 
            if (entity_reference_node_found(child)) 
                return true; 
        return false; 
    } 
} 

int main() 
{ 
    XMLPlatformUtils::Initialize(); 
    { 
        XercesDOMParser parser; 
        parser.parse("undefined_entity.xml"); 
        cout << entity_reference_node_found(parser.getDocument()) << '\n'; 
    } 
    XMLPlatformUtils::Terminate(); 
} 


with the next XML file: 


<?xml version="1.0"?> 
<!DOCTYPE test> 
<test>&abcd;</test> 


It will print 0. Why?

-- 
View this message in context: 
http://www.nabble.com/Keep-undefined-entity-references-while-parsing-tp23899329p23899329.html
Sent from the Xerces - C - Users mailing list archive at Nabble.com.

Reply via email to