【问题标题】:Defining embedded XML in XMLSchema在 XMLSchema 中定义嵌入式 XML
【发布时间】:2011-12-16 13:02:37
【问题描述】:

我必须使用 XML Schema 验证包含嵌入式 XML 的 XML 文件。我对内部 XML 的正确性不感兴趣。对于这种类型的内容,我应该在 XML Schema 中使用哪种类型?简单的xs:string 不起作用。

【问题讨论】:

  • 您在使用xs:string时遇到了什么问题?
  • .net 验证器很聪明,可以识别内容是 xml - 我收到错误:“元素 'xxx' 不能包含子元素 'yyy',因为父元素的内容模型仅为文本。”跨度>
  • 用几个替代方案更新了我的答案,您可以将它们用于文本 (xs:string) 内容。

标签: xml xsd


【解决方案1】:

在另一个 XML 文档中嵌入 XML 有多种选择。

xs:any:

您可以在架构中使用 xs:any 类型 (link)。但是,您需要为嵌入的 XML 包含一个架构(将用于验证它)。

或者,如果您将内部 XML 嵌入到 CDATA 部分或转义所有 <& 字符,则可以使 xs:string 工作。

CDATA 部分:

<InnerXml>
  <![CDATA[
    <InnerXmlRoot>
      <InnerXmlContent>One & Two</InnerXmlContent>
    </InnerXmlRoot>
  ]]>
</InnerXml> 

使用这种方法唯一需要注意的是,内部 XML 不能包含 CDATA 部分,因为允许的内容不能包含 ]]&gt;(请参阅 XML specification)。

字符转义:

<InnerXml>
  &lt;InnerXmlRoot>
    &lt;InnerXmlContent>One &amp; Two&lt;/InnerXmlContent>
  &lt;/InnerXmlRoot>
</InnerXml> 

【讨论】:

  • 问题是,内部 XML 可以变化。我只是想让验证者不关心它。
  • 使用 CDATA 的解决方案几乎可以正常工作(一些格式问题,但很容易解决)。感谢您的帮助。
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多