XercesC++を使用して外部DTDファイルでXMLを検証しようとしています。残念ながら、検証が失敗するはずのときに失敗します。「XmlErrorHandler:3行目の列11のXMLエラー:不明な要素'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);
検証が失敗する理由を教えていただければ幸いです。