我需要分析几千个 XML 文档,看看其中一些是否包含某种结构。问题是某些文档不包含格式良好的 XML。
基本思想是fn:collection()
在返回的节点内使用和搜索。但这仅适用于集合中的所有文档格式正确的情况。
是否可以做类似的事情,但只解析格式良好的文档?
这是我的简化版 XSLT,如果其中的所有文档格式正确,它就可以工作$dir
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:variable name="dir" as="xs:string">file:/c:/path/to/files/</xsl:variable>
<xsl:variable name="files" select="concat($dir, '?select=*.xml')" as="xs:string"/>
<xsl:template match="/">
<xsl:variable name="docs" select="collection($files)"/>
<xsl:variable name="names" select="
for $i in $docs return
distinct-values($i//*[exists(@an-attribute-to-find)]/local-name())"/>
<xsl:value-of select="distinct-values($names)" separator="
"/>
</xsl:template>
</xsl:stylesheet>
是否可以在转换开始之前不手动整理格式不正确的文档来做这样的事情?也许您对解决方案有更好的建议?