Мне нужно проанализировать несколько тысяч 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>
Можно ли сделать что-то вроде этого не вручную сортировок НЕРАСПРОСТРАНЕНИЯ хорошо сформированных документов до начинается трансформация? Может быть, у вас есть лучшее предложение для решения?
Я разрешу это так. Затем я могу проверить каждый документ с помощью 'doc-available()'. Не то, на что я надеялся, но это достаточно хорошо. –