Я добавляю дополнительное условие к существующей таблице стилей xsl.
Упрощенный XML входной контент выглядит следующим образом:
<form id="MY_CONTENT">
<variable id="processInfo">
<variable id="teacher">
<variable id="taxId" value="12345"/>
<variable id="name" value="Nancy"/>
</variable>
<variable id="student">
<variable id="taxId" value="12345"/>
<variable id="name" value="Nancy"/>
</variable>
<variable id="student">
<variable id="taxId" value="23456"/>
<variable id="name" value="Will"/>
<variable id="tutoringtInformation">
<variable id="specialNeeds">
<variable id="description" value="Special Need"/>
</variable>
</variable>
</variable>
<variable id="student">
<variable id="taxId" value="98765"/>
<variable id="name" value="Dustin"/>
<variable id="tutoringtInformation">
<variable id="preferences">
<variable id="reason" value="Mornings"/>
</variable>
</variable>
</variable>
<variable id="student">
<variable id="taxId" value="784512"/>
<variable id="name" value="Steve"/>
<variable id="tutoringtInformation">
<variable id="available" value="false"/>
</variable>
</variable>
</variable>
Сейчас xslt только отфильтровывает элементы типа «student», чей taxId отличается от taxId для элемента «teacher».
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:for-each select="/form/variable[@id = 'processInfo']/variable[@id = 'student' and variable[@id = 'taxId']/@value != ../variable[@id = 'policyHolder']/variable[@id = 'taxId']/@value]">
<xsl:variable name="taxId" select="variable[@id = 'taxId']/@value"/>
<resultSet>
<xsl:copy-of select="/form/variable[@id = 'processInfo']/variable[@id = 'student' and variable[@id = 'taxId']/@value = $taxId]"/>
<xsl:copy-of select="/form/variable[@id = 'processInfo']/variable[@id != 'student']"/>
<xsl:copy-of select="/form/variable[@id != 'processInfo']"/>
</resultSet>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
Наряду с этим условием я также хочу отфильтровать student элементы, которые не имеют какое-либо из следующих условий (или):
- дочерний элемент tutoringtInformation , который имеет дочерний элемент specialNeeds
- дочерний элемент tutoringtInformation , который имеет дочерний элемент предпочтения
На входе XML он должен вывести и Уилл, и Дастин. Как я могу добиться такого поведения?