【问题标题】:XSD Hide Parent Node When all Child Nodes are Empty当所有子节点都为空时,XSD 隐藏父节点
【发布时间】:2016-02-04 12:04:55
【问题描述】:

XSD

<xs:element name="Notes" minOccurs="0" maxOccurs="unbounded">
  <xs:complexType>
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="Note" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Subject" type="xs:string" minOccurs="0"/>
            <xs:element name="Note" type="xs:string" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

当前输出 XML,当 SubjectNote 为空时:

<Notes>
   <Note/>
</Notes>

但是,当 SubjectNote 为空时,我不想要任何输出。

【问题讨论】:

  • 嗯,模式根本不创建任何输出,它用于根据其定义的语法验证实例文档。如果您使用工具或某些数据绑定 API 从模式生成实例文档,那么您需要告诉我们您使用的工具的详细信息,以及您如何使用它。

标签: xml xsd


【解决方案1】:

XSD 和 XSLT 的区别

XSD 用于验证。

  • 输入:XML 文档
  • 输出:验证结果

XSD 指定 XML 文档有效的约束条件。验证的输出是成功或失败,如果失败,通常会有诊断消息解释约束违规。根据您的 XSD 元素声明,您当前的输出 XML 将是有效的,&lt;Notes/&gt; 也是如此。但是,一个空文档会not be valid because it would not be well-formed

XSLT 用于转换。

  • 输入:XML文档*
  • 输出:XML文档*

XSLT 转换指定从输入 XML 到输出 XML 的映射。它使用 XPath 选择输入的部分,以便它们可以有条件地包含在输出中并排列。 您问题的语言表明您可能希望使用 XSLT 而不是 XSD 来实现您的结果。 XSLT 根据用户提供的模板将输入转换为输出,而不是 XSD 中给出的约束。**

*输出也可以是文本; XSLT 2.0 的输入也可以是文本。

**XSLT 2.0 处理器可以识别模式,但不提供自动映射工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多