从 xmlschemaset 转换为 xmlnode 时出错

Error converting from xmlschemaset to xmlnode

提问人:James 提问时间:11/2/2023 更新时间:11/2/2023 访问量:38

问:

我正在尝试读取json文件并使用xsd进行解析并从中生成xml输出。但是我的代码抛出构建错误。无法从“System.Xml.Schema.XmlSchemaSet”转换为“System.Xml.XmlNode”

static void Main(string[] args)
    {
        string json = File.ReadAllText(@"C:\Test\json1.json"); 
        string xsd = File.ReadAllText(@"C:\Test\xsd1.xsd"); 
        
        bool isValid = ValidateJsonAgainstXsd(json, xsd);
        if (!isValid)
        {
            Console.WriteLine("JSON is not valid according to the XSD.");
            return;
        }

        XmlDocument xmlDoc = JsonConvert.DeserializeXmlNode(json, "root");
        xmlDoc.Save(@"C:\Test\my.xml"); 
    }

    static bool ValidateJsonAgainstXsd(string json, string xsd)
    {
        XmlSchemaSet schemas = new XmlSchemaSet();
        schemas.Add("", XmlReader.Create(new StringReader(xsd)));
        
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(JsonConvert.DeserializeXmlNode(json).OuterXml);
        
        bool isValid = true;
        xmlDoc.Validate((sender, e) =>
        {
            Console.WriteLine(e.Message);
            isValid = false;
        }, schemas);
        
        return isValid;
    }

当它尝试使用变量时会出现错误schemas

C# XML

评论

0赞 Michael Kay 11/2/2023
你说“我正在尝试读取 json 文件并使用 xsd 进行解析并从中生成 xml 输出。但实际上,我对您的代码的解读是,您读取一个 JSON 文件,使用某个库将其转换为 XML,然后检查库生成的 XML 是否对您的架构有效。你的代码正在做什么和你说它正在做什么之间的差异表明了一定程度的混淆。
0赞 jdweng 11/2/2023
你有错别字吗?: JsonConvert.DeserializeXmlNode(json, “根”);JSON 应该是 XSD 吗?

答:

0赞 Yong Shun 11/2/2023 #1

从这个例子中:在DOM中验证XML文档,你应该将架构添加到instance的属性中。SchemasXmlDocument

static bool ValidateJsonAgainstXsd(string json, string xsd)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(JsonConvert.DeserializeXmlNode(json).OuterXml);

    xmlDoc.Schemas.Add("", XmlReader.Create(new StringReader(xsd)));

    bool isValid = true;
    xmlDoc.Validate((sender, e) =>
                    {
                        Console.WriteLine(e.Message);
                        isValid = false;
                    });

    return isValid;
}

评论

0赞 Yong Shun 11/2/2023
演示 @ .NET Fiddle
0赞 James 11/2/2023
我看不出你在哪里使用JSON格式。您使用 XML。您读取 json 文件,然后将 xsd 应用于它,然后从中生成 xml
0赞 Yong Shun 11/2/2023
对不起,你的意思是我分享的演示链接,或者?如果您指的是演示链接,是的,我的输入测试数据使用的是 XML,然后将其转换为 JSON 作为测试数据,以根据您提供的代码进行调整,该代码验证将转换为 XML 模式的 XML。
0赞 Yong Shun 11/2/2023
或者您可以使用/fork 我的演示链接,粘贴您的 JSON 和 XML 模式来验证代码。
0赞 James 11/2/2023
我的 json 有点太大了,所以不确定我如何将其附加到 Fiddle