从顶部 XML 文件中提取 XSD
Extract XSD from top off XML file
我被要求制作一个程序来验证 XML 与 XSD 的对比。这是一个简单的部分(我知道有很多帖子都在谈论它)。
我的问题是:XSD 包含在 XML 文件中,我不知道如何将它提取到单独的文件中以供解析器验证。
附件图片是我需要处理的文件类型的示例,但这是一个非常简单的文件。我们有 XML 个大小高达 220MB 的文件,因此这需要高效 :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 元素后停止读取输入。
我被要求制作一个程序来验证 XML 与 XSD 的对比。这是一个简单的部分(我知道有很多帖子都在谈论它)。 我的问题是:XSD 包含在 XML 文件中,我不知道如何将它提取到单独的文件中以供解析器验证。 附件图片是我需要处理的文件类型的示例,但这是一个非常简单的文件。我们有 XML 个大小高达 220MB 的文件,因此这需要高效 :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 元素后停止读取输入。