Вы можете использовать следующий набор стилей / шаблонов:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent[child2 and child3]">
<xsl:copy>
<xsl:copy-of select="child1"/>
<child1.5>
Content
</child1.5>
<xsl:copy-of select="child3"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent[child2 and not(child3)]">
<xsl:copy>
<xsl:copy-of select="child1"/>
<child3>
<xsl:value-of select="child2" />
</child3>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Вывод (с элементом root
, который делает ваш XML правильно сформированным ):
<?xml version="1.0"?>
<root>
<parent><child1>
</child1>
<child3>
</child3>
</parent>
<parent><child1>
</child1>
<child1.5>
Content
</child1.5>
<child3>
</child3>
</parent>
</root>