У меня есть этот образец XML-документа
<root>
<type1></type1>
<type2>
<text>
This is a test
</text>
</type2>
<type3>
<child>3</child>
</type3>
<type4></type4>
<type5></type5>
<type6></type6>
<type7>
<text>
This is a test
</text>
<child>7</child>
</type7>
</root>
И я хотел бы, чтобы окончательный вывод содержал только данные типа 3 и типа 7
<root>
<type3>
<child>3</child>
</type3>
<type7>
<text>
This is a test
</text>
<child>7</child>
</type7>
</root>
Я использую XSLT, чтобы попытаться произвести вышеупомянутый вывод
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:template match="root | type3 | type7 | *[ancestor::type3] | *[ancestor::type7] | comment() | processing-instruction() | @*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Но это производит вывод
<root>
This is a test
<type3>
<child>3</child>
</type3>
<type7>
<text> This is a test </text>
<child>7</child>
</type7>
</root>
Как мне не дать XML сохранить текст в областях, которые я не хочу хранить, например, в узле типа 2? Я знаю, что эта проблема связана со стандартными встроенными шаблонами, но я не уверен, как обойти это.