C# XML验证,然后使用C进行转换#
使用c#控制台程序,我读取CSV文件并将其转换为中间XML文件。我想根据XSD验证XML,然后如果它有效,则执行另一个转换。问题是,我只能验证是否在生成的中间文件中包含“xmlns=urn:employee schema”条目,并且只能在包含“xmlns:ch=urn:employee schema”条目时进行转换。同时拥有这两个条目可以防止验证和转换 有关守则如下:C# XML验证,然后使用C进行转换#,c#,xml,xslt,xsd,C#,Xml,Xslt,Xsd,使用c#控制台程序,我读取CSV文件并将其转换为中间XML文件。我想根据XSD验证XML,然后如果它有效,则执行另一个转换。问题是,我只能验证是否在生成的中间文件中包含“xmlns=urn:employee schema”条目,并且只能在包含“xmlns:ch=urn:employee schema”条目时进行转换。同时拥有这两个条目可以防止验证和转换 有关守则如下: static void Transform(string inputFile, string transformFile, st
static void Transform(string inputFile, string transformFile, string outputFile)
{
XslCompiledTransform xslTrans = new XslCompiledTransform(true);
XsltSettings xsltSettings = new XsltSettings(true, false);
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("urn:employee-schema", "employee.xsd");
XmlSchema compiledSchema = null;
foreach (XmlSchema schema in schemaSet.Schemas())
{
compiledSchema = schema;
}
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(compiledSchema);
XmlReader reader = XmlReader.Create(transformFile, settings);
xslTrans.Load(reader, xsltSettings, null);
xslTrans.Transform(inputFile, outputFile);
}
static void Validate(string inputFile)
{
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("urn:employee-schema", "employee.xsd");
XmlSchema compiledSchema = null;
XmlReaderSettings settings = new XmlReaderSettings();
foreach (XmlSchema schema in schemaSet.Schemas())
{
compiledSchema = schema;
}
settings.Schemas.Add(compiledSchema);
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
using (XmlReader reader = XmlReader.Create(inputFile, settings))
{
while (reader.Read());
}
}
employee.xsd文件:
此XML将验证但不转换:
2133654040058
玛格丽特·迪肯
此XML将转换但不验证:
2133654040058
玛格丽特·迪肯
这是XSLT的转换:
雇员
感谢@michael.hor257k为我指明了正确的方向。具体来说,我需要将转换XSLT更改为:
雇员
以下内容同时验证和转换:
2133654040058
玛格丽特·迪肯
```
请参阅:虽然解决方案相同,但此问题与上述问题的不同之处在于症状不同,验证或转换可以工作,但不能同时工作。另外,要找到上面的问题,我必须知道问题只是与XSLT有关,而不是与XSD有关。