我需要分析几千个
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>
是否有可能做这样的事情而不需要在转换开始之前手动整理非格式良好的文档?也许你对解决方案有更好的建议?