【问题标题】:Extract XSD from top off XML file从顶级 XML 文件中提取 XSD
【发布时间】:2021-06-16 17:51:35
【问题描述】:

有人要求我编写一个针对 XSD 验证 XML 的程序。这是一个简单的部分(我知道有很多帖子都在谈论它)。 我的问题是:XSD 包含在 XML 文件中,我不知道如何将其提取到单独的文件中以供解析器验证。 附图是我需要处理的文件类型的一个例子,但这是一个非常简单的文件。我们有最大 220MB 大小的 XML 文件,所以这需要高效 :D 提前谢谢大家, 塞缪尔。

https://i.stack.imgur.com/xfkKt.png

【问题讨论】:

  • 你会使用巫婆语言来解析文件吗?你试过什么?
  • 我正在使用C#为此制作一个小应用程序。

标签: xml validation parsing xsd


【解决方案1】:

我总是觉得根据文件附带的架构验证文件毫无意义 - 如果您不相信文件是有效的,为什么要相信它包含有用的架构?但是,如果这是您想要做的,那么 (a) 一些验证 API 可能允许您直接从其嵌入位置编译模式,并且 (b) 如果您选择的模式处理器没有,那么可以使用普通的 XSLT 或 XQuery - 例如 Saxon 命令

java net.sf.saxon.Query -s:doc.xml -qs:"//xs:schema" -o:schema.xsd

为了获得更好的性能,为了避免解析整个 220Mb,您可以使用流式 XSLT 3.0 转换来提取架构:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  version="3.0">

<xsl:mode streamable="yes"/>

<xsl:template match="/">
  <xsl:copy-of select="/*/xs:schema[1]"/>
</xsl:template>
</xsl:transform>

[1] 告诉处理器它可以在处理完第一个 xs:schema 元素后停止读取输入。

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多