从变量(如 here-string)生成 xml 架构

Generate an xml schema from a variable (like a here-string)

提问人:Paul π 提问时间:9/16/2023 最后编辑:Paul π 更新时间:9/18/2023 访问量:58

问:

最终,我想知道是否可以根据 here-string 变量(而不是已经存在的 .xsd 文件)中包含的架构来验证 Xml 文件。

  • 我在网上找到了几个示例,并通读了大部分 [System.Xml.Schema] 文档,并且可以找到许多有关如何从 .xml 文件(或使用已经存在的 .xsd 文件)创建 Xml 架构的示例,但我找不到有关生成和使用包含在 here-string 变量中的架构的任何信息。
  • 我遇到的(看似)适用的类(XmlReader、XmlTextReader、XmlSchema 等)都没有类似于 XmlDocument.LoadXml(String) 的构造函数或方法重载,它可以接受包含 Xml 的 here-string。



我是否遗漏了某些内容,或者如果我想针对架构验证 XmlDocument 实例,我是否必须创建一个 .xsd 文件?

  • 我对创建 .xsd 文件(在我正在使用的环境中)的担忧是,对 XYZ 文件夹的写入权限可能会被拒绝。
XML PowerShell 架构 XSD 验证

评论


答:

2赞 Michael Kay 9/16/2023 #1

System.Xml.Schema.XmlSchema 具有一个 Read 方法,该方法允许您从 System.IO.TextReader 获取输入,因此从 System.IO.StringReader 获取输入,从而从 String 获取输入。

$xmlSchemaText = @"
<schema xml here>
"@

$stringReader = [System.IO.StringReader]::new($xmlSchemaText)

$xmlSchema = [System.Xml.Schema.XmlSchema]::Read($stringReader)

评论

1赞 Michael Kay 9/18/2023
当然,请注意,如果架构由多个不同的架构文档组成,则 or 声明链接起来会变得更加困难(但并非不可能)。xs:includexs:import