Description
This application is used to validate XML files against XML schemas. This requires the MSXML library (4.0 or above); be aware of the bugs and update to the latest version or Service Pack!
Usage
The Collection
Is a storage where you can add <namespace, schema> pairs (check MSDN on the subject of XML schemas and IXMLDOMSchemaCollection
for more information). Basically, you provide a namespace related to a schema. The namespace will be unique in the collection while the schema should appear in several distinct pairs.
Status
Take a look at this box after every operation, to see if it succeeded or not.
Insert Pair
Write the URN of the schema in the uppermost edit box. You can open it from the local machine, pressing Open. Write the namespace in its edit place (the combo). Press Insert into Collection. Notice that the namespace could be an empty string or one made entirely by spaces. Inserting a namespace that already exists in the collection will update the content of the schema associated. You have to do it any time you modify the schema file. If you fail to insert a schema for a namespace that already exists in the collection, the last successfully inserted will remain as active.
Remove Pair
Is done using only the namespace. Type it or choose it from the combo and press Remove from Collection.
Remove All Pairs
Just press Empty entire Collection.
Validate XML
Write the URN of the XML file in the uppermost edit box or Open it. Press Validate as XML.
The Browser
Is used to display the content of the files involved into the validation process. You can also use it as with IE (view and modify the source, for example).
IXMLDOMSchemaCollection As Used
The code is from ValidatorDlg.cpp.
Creation
BOOL CValidatorDlg::OnInitDialog()
{
HRESULT hr2, hr1=m_doc.CoCreateInstance(__uuidof(DOMDocument));
hr2=m_schema.CoCreateInstance(__uuidof(XMLSchemaCache));
if (hr1!=S_OK || hr2!=S_OK)
{
MessageBox("Creating COM objects failure!\r\n"
"Make sure you have installed MSXML 4.0 on your machine!",
"XMLbyXSD");
PostQuitMessage(0);
}
VARIANT var;
var.vt = VT_DISPATCH;
var.pdispVal = m_schema.p;
if (m_doc->putref_schemas(var)!=S_OK)
{
MessageBox("COM operation failed!", "XMLbyXSD");
PostQuitMessage(0);
}
m_doc->put_async(VARIANT_FALSE);
m_doc->put_validateOnParse(VARIANT_TRUE);
}
Pair Insertion
void CValidatorDlg::OnButtonAdd()
{
CString szMan, szUrn;
try
{
m_schema->add(_bstr_t(szMan), _variant_t(szUrn));
}
catch (_com_error &x)
{
PrintStatus("Schema error!", (char *)x.Description(),
0, NULL);
return;
}
}
Namespace Removing
void CValidatorDlg::OnButtonRemove()
{
CString szMan;
try
{
m_schema->remove(_bstr_t(szMan));
}
catch (_com_error &x)
{
PrintStatus("Removing schema error!", (char *)x.Description(),
0, NULL);
return;
}
}
Validation
void CValidatorDlg::OnButtonValidate()
{
BSTR bs;
CString szReason, szText;
m_doc->load(_variant_t(szText));
IXMLDOMParseError *pErr=NULL;
if (m_doc->get_parseError(&pErr)==S_OK)
if (pErr)
{
pErr->get_errorCode(&ln);
if (ln)
{
}
else
PrintStatus("XML is valid according to "
"collection content!", NULL, ln, NULL);
pErr->Release();
}
}
Updates
- September 30, 2002 - Bug fixed.