Xerces C ++ DTD валидация всегда терпит неудачу - PullRequest
1 голос
/ 03 декабря 2010

Я пытаюсь проверить некоторый XML с помощью внешнего файла DTD, используя Xerces C ++.К сожалению, проверка завершается неудачно, когда этого не происходит, я получаю сообщение об ошибке «XmlErrorHandler: ошибка XML в строке 3 в столбце 11: неизвестный элемент« c »».

Я пытаюсь проверить следующий XML

<?xml version="1.0" encoding="UTF-8"?>

<c>
    <p>
        <r>...</r>
        <g>...</g>
        <b>...</b>
    </p>
    <s>
        <r>...</r>
        <g>...</g>
        <b>...</b>
    </s>
    <t>
        <r>...</r>
        <g>...</g>
        <b>...</b>
    </t>
    <l0>...</l0>
    <l1>...</l1>
    <l2>...</l2>
</c>

со следующим DTD (расположенным в C: \ mydtd.dtd):

<!ELEMENT c (p, s, t, l0, l1, l2)>
<!ELEMENT p (r, g, b)>
<!ELEMENT s (r, g, b)>
<!ELEMENT t (r, g, b)>
<!ELEMENT r (#CDATA)>
<!ELEMENT g (#CDATA)>
<!ELEMENT b (#CDATA)>
<!ELEMENT l0 (#CDATA)>
<!ELEMENT l1 (#CDATA)>
<!ELEMENT l2 (#CDATA)>

Это код загрузки анализатора:

m_pkXmlParser = XMLReaderFactory::createXMLReader();
m_pkXmlParser->loadGrammar("C:\\mydtd.dtd", Grammar::DTDGrammarType);
m_pkXmlParseHandler = new XmlParseHandler;
m_pkXmlErrorHandler = new XmlErrorHandler;
m_pkEntityResolver = new XmlEntityResolver;
m_pkXmlParser->setContentHandler(m_pkXmlParseHandler);
m_pkXmlParser->setErrorHandler(m_pkXmlErrorHandler);
m_pkXmlParser->setEntityResolver(m_pkEntityResolver);

Любая помощь, почему проверка не проходит, очень ценится.

...