Я бы хотел сравнить два XML-файла через XSLT.Сравнение следует считать успешным, если все элементы определенного типа в документе 1 расположены в одной и той же позиции XPath в документе 2.
Рассматривать
<entry>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
как документ 1.
Наблюдаемым элементом является «значение» (с типом атрибута = 1), которое находится в entry / entry1 / entry2.Поэтому сравнение в этом смысле с
<entry>
<entry0/>
<entry0/>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
следует рассматривать как успешное, в то время как
<entry>
<entry1>
<value type="1"/>
</entry1>
</entry>
не является успешным, поскольку «значение» (с типом атрибута = 1) находится взапись / entry1.Также сравнение с
<entry>
<entry1>
<entry2>
<value type="2"/>
</entry2>
</entry1>
</entry>
следует рассматривать как неуспешное, поскольку атрибут value имеет тип = 2.
Мой наивный тест на выполнение этой задачи в XSLT был примерно таким:
<xsl:template match="value">
<xsl:if test="not(document($doc2)/.[@type=@type])">
<xsl:text>something is missing</xsl:text>
</xsl:if>
</xsl:template>
Этот подход не увенчался успехом, поскольку выбор требуемого XPath во втором документе, похоже, не работает.
Может быть, у вас есть идея, как решить этот вопрос?
Мэтт