微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从顶部的 XML 文件中提取 XSD

如何解决从顶部的 XML 文件中提取 XSD

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

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

解决方法

根据文件随附的模式验证文件总是让我觉得毫无意义 - 如果您不相信文件有效,为什么要相信它包含有用的模式?但是,如果这就是您想要做的,那么 (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 元素后停止读取输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。