当所有子节点都为空时,XSD隐藏父节点

时间:2016-02-04 12:04:56

标签: xml xsd

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>
SubjectNote为空时

当前输出XML

<Notes>
   <Note/>
</Notes>

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

1 个答案:

答案 0 :(得分:0)

XSD和XSLT之间的区别

XSD 用于 验证。

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

XSD 指定XML文档有效的约束。验证的输出是成功还是失败,并且失败时,通常会有诊断消息来解释约束违规。根据您的XSD元素声明,您当前的输出XML将是有效的,就像<Notes/>一样。但是,空文档会not be valid because it would not be well-formed

XSLT 用于 转换。

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

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

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

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