C# XML验证,然后使用C进行转换#

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

使用c#控制台程序,我读取CSV文件并将其转换为中间XML文件。我想根据XSD验证XML,然后如果它有效,则执行另一个转换。问题是,我只能验证是否在生成的中间文件中包含“xmlns=urn:employee schema”条目,并且只能在包含“xmlns:ch=urn:employee schema”条目时进行转换。同时拥有这两个条目可以防止验证和转换

有关守则如下:

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有关。