我一直在嘗試使用C代碼中的模式文件來驗證XML文件。驗證成功發生,說明文件是有效還是無效。如何使用libxml2以C編程語言使用模式文件驗證xml文件
但我的問題是它只打印有效/無效。應該有一個關於xml文件中缺少的情況的報告/輸出,以防它失效。可能類似於XML文件中的行號。
希望,我已經讓自己清楚。
這裏是我的C代碼: -
int validateXmlFile()
{
int iError = 0;
xmlDocPtr pDoc;
xmlDocPtr pSchemaDoc;
xmlSchemaParserCtxtPtr pSchemaCtxt;
xmlSchemaPtr pSchema;
xmlSchemaValidCtxtPtr pValidCtxt;
char * xmlFilename = "C:\\Documents and Settings\\pbhatia\\Desktop\\Schema\\ipt_config.xml";
char * schemaFilename = "C:\\Documents and Settings\\pbhatia\\Desktop\\Schema\\ipt_config.xsd";
PRNT(printf("Schema file : %s \n", schemaFilename));
PRNT(printf("XML file : %s \n", xmlFilename));
pDoc = xmlReadFile(xmlFilename, NULL, XML_PARSE_NONET);
if (!pDoc)
return -1;
pSchemaDoc = xmlReadFile(schemaFilename, NULL, XML_PARSE_NONET);
if (!pSchemaDoc)
return -2;
pSchemaCtxt = xmlSchemaNewDocParserCtxt(pSchemaDoc);
if (!pSchemaCtxt)
return -3;
pSchema = xmlSchemaParse(pSchemaCtxt);
if (!pSchema)
return -4;
pValidCtxt = xmlSchemaNewValidCtxt(pSchema);
if(!pValidCtxt)
return -5;
// Attempting to validate xml with schema
xmlSchemaFreeParserCtxt(pSchemaCtxt);
xmlFreeDoc(pSchemaDoc);
iError = xmlSchemaValidateDoc(pValidCtxt, pDoc);
if (iError == 0)
PRNT(printf("Document in %s is valid \n", xmlFilename));
else
PRNT(printf("Document in %s is NOT valid \n", xmlFilename));
xmlSchemaFree(pSchema);
xmlFreeDoc(pDoc);
return 0;
}
感謝, 普里
請您提供一個相同的示例代碼。 –
他們在另一個SO問題:[libxml2獲取驗證錯誤](http://stackoverflow.com/questions/12107423/libxml2-get-validation-errors) – Jarekczek
執行所需的功能後,我能夠得到錯誤/警告。但它並沒有顯示xml文件在哪一行發生錯誤(即驗證失敗)。我們能做到這一點怎麼樣? –