我想测试(true或false)任意XML文件是否与给定的模式匹配。
值得一提的是,这个模式是word2003wordml模式,微软使用大约7个字符的列表来定义它
*.xsd
文件夹。
其中一个文件还包括W3C
xml.xsd
文件,包括以下语句:
<xsd:import id="xml" namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"></xsd:import>
我使用如下.NET代码进行验证:
public static void validate(string filename)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(
"http://schemas.microsoft.com/office/word/2003/wordml",
@"C:\Program Files\Microsoft Office 2003 Developer Resources\Microsoft Office 2003 XML Reference Schemas\WordprocessingML Schemas\wordnet.xsd"
);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(validationEventHandler);
XmlReader xmlReader = XmlReader.Create(filename, settings);
while (xmlReader.Read()) { }
}
我的问题是,如果我在没有连接到互联网的机器上运行这个代码,那么我会得到一个
XmlSchemaValidationException
xml.xsd
.
settings.Schemas.Add
方法:当机器未连接到internet时,验证现在可以正常工作。
但是,当机器连接到internet时,我现在得到一个错误,即
The global attribute 'http://www.w3.org/XML/1998/namespace:lang' has already been declared.
所以,这是“该死的如果我做和该死的如果我不”。我是否需要尝试一种方法,捕获异常,然后再尝试另一种方法?还是有更优雅的解决方案?