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

xml – 在解析之前测试文档是否格式正确

我需要分析几千个 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="&#x0a;"/>
  </xsl:template>

</xsl:stylesheet>

是否有可能做这样的事情而不需要在转换开始之前手动整理非格式良好的文档?也许你对解决方案有更好的建议?

解决方法

目前,最好用XSLT完成.

它可以在XSLT中完成,如果你提供exrternal参数(< xsl:param>)到转换一个要处理的所有文件名的列表 – 那么转换将使用标准的XPath 2.0函数doc-available()和仅对此函数返回的文档节点进行操作.

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