3

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;
}

ありがとう、プリヤンカ

4

2 に答える 2

1

ソースコードを読むxmllint.cと、を使用して、コンテキスト内のエラーと警告のコールバックを設定できることがわかりますxmlSchemaSetValidErrors。最も単純なケースでは、転送するfprintfとエラーが出力されます。

xmlSchemaSetValidErrors(ctxt,
    (xmlSchemaValidityErrorFunc) fprintf,
    (xmlSchemaValidityWarningFunc) fprintf,
    stderr);

UTSL :)

于 2012-09-18T13:19:57.617 に答える
0

あなたのschame部分への答えではなく、あなたの「どこで見つけるか」エラーへの答え:

  FILE *f = fopen("/temp/xml_err.log", "a");

  xmlDocPtr doc;
  if (f) {
    xmlSetGenericErrorFunc(f, NULL);
  }
  doc = xmlParseMemory(xmlstr, XMLMAXSTRSIZE);
  if (f) {
    fclose(f);
  }
于 2012-09-17T09:35:41.900 に答える