从自定义XML文件创建XSD架构

时间:2017-08-24 07:01:02

标签: c# xml validation xsd

我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="profile">
      <section name="server1" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=a1a1a1a1a1a1a1a1, Custom=null" />
      <section name="server2" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=a1a1a1a1a1a1a1a1, Custom=null" />
      <section name="server3" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=a1a1a1a1a1a1a1a1, Custom=null" />
    </sectionGroup>
  </configSections>
  <profile>
    <server1>
      <add key="server" value="serverName1" />
      <add key="check" value="0" />
      <add key="user" value="sa" />
      <add key="psw" value="secret" />
      <add key="show" value="1" />
    </server1>
    <server2>
      <add key="server" value="serverName2" />
      <add key="check" value="0" />
      <add key="user" value="sa" />
      <add key="psw" value="secret" />
      <add key="show" value="1" />
    </server2>
    <server3>
      <add key="server" value="serverName3" />
      <add key="check" value="0" />
      <add key="user" value="sa" />
      <add key="psw" value="secret" />
      <add key="show" value="1" />
    </server3>
  </profile>
</configuration>

我想为其验证创建XSD架构。我已尝试使用在线XSD生成器(如https://www.freeformatter.com/xsd-generator.html)和3种类型的XSD设计中的任何一种,但问题是如果除了3之外的XML中有任何其他数量的服务器,验证将无法通过。

对于可以解释这种随机性的软件或其他在线XSD生成器的任何帮助或建议都非常感谢?

2 个答案:

答案 0 :(得分:0)

我总是发现XSD.exe做得很好。这个validator也很不错。最重要的是,您可以在Notepad ++中尝试XML Tools插件。

对于复杂的XML文档,通常更容易构建它们,因此从简化版本开始,然后逐步添加其他部分。

tutorial和此one都非常好,如果您正在努力使用xsds,那绝对值得一看。

我建议您查看教程,然后重新考虑您想要的内容并相应地重构您的xml。一个明显的第一个问题可能是server1,server2和server3有何不同?如果他们都是一样的你想要三个服务器实例;如果它们不同,你可能想要以某种方式捕获你的xml。

答案 1 :(得分:0)

XSD(XSD 1.1断言除外)无法说出这个元素的子元素必须命名为&#34; server1&#34;,&#34; server2&#34;,.. 。&#34; serverN&#34;顺序&#39;。 XSD有点家长式:它不是为了描述您可能想到的任何XML而设计的,它旨在描述设计良好的XML。您应该删除数字并调用所有元素&#34; server&#34 ;;或者如果数字用于某种目的(例如,如果在从XML中删除某些服务器元素后保留它),则将其设为属性值:<server id="server1".../>