【问题标题】:Create XSD schema from custom XML file从自定义 XML 文件创建 XSD 架构
【发布时间】:2017-08-24 07:01:01
【问题描述】:

我的 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 设计中的任何一种,但问题是如果 XML 中除了 3 之外还有任何其他数量的服务器,验证将不会通过。

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

【问题讨论】:

  • 在线生成器为此苦苦挣扎的原因是它糟糕的 XML 设计。只包含多个 &lt;server&gt;...&lt;/server&gt; 元素会更优雅、更容易解析和更容易生成。

标签: c# xml validation xsd


【解决方案1】:

在 XSD(XSD 1.1 断言除外)中没有办法说“此元素的子元素必须按顺序命名为“server1”、“server2”、...“serverN”。 XSD 有点像这样的家长式做法:它的设计目的不是描述您可能梦想的任何 XML,而是设计用于描述设计良好的 XML。您应该删除数字并将所有元素称为“服务器”;或者如果数字有某种用途(例如,如果在从 XML 中删除某些服务器元素后保留它),则将其设为属性值:&lt;server id="server1".../&gt;

【讨论】:

  • 感谢您的回答。我想可能是这样的。所以我想我会更改“我的”应用程序的源代码。
【解决方案2】:

我一直发现XSD.exe 做得很好。这个validator也不错。除此之外,您还可以尝试 Notepad++ 中的 XML Tools 插件。

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

tutorialone 都非常好,如果您正在为 xsds 苦苦挣扎,绝对值得一看。


我建议您查看教程,然后重新考虑您想要什么并相应地重组您的 xml。一个明显的第一个问题可能是 server1、server2 和 server3 有何不同?如果它们都相同,则需要三个服务器实例;如果它们不同,您可能希望以某种方式在您的 xml 中捕获它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多