これは非常に単純な XSLT 1.0 ソリューションです。
入力ファイル:
<XML>
<Name>Name1;Name2</Name>
<Address>Address1;Address2</Address>
<Name>Name3;Name4</Name>
<Address>Address3;Address4</Address>
</XML>
スタイルシート:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="XML">
<XML>
<xsl:apply-templates select="Name"/>
</XML>
</xsl:template>
<xsl:template match="Name" mode="name-address">
<xsl:param name="name" select="substring-before(., ';')"/>
<xsl:param name="address" select="substring-before(following-sibling::*[1][self::Address], ';')"/>
<LINE>
<Name>
<xsl:value-of select="$name"/>
</Name>
<Address>
<xsl:value-of select="$address"/>
</Address>
</LINE>
</xsl:template>
<xsl:template match="Name">
<xsl:apply-templates select="." mode="name-address"/>
<xsl:apply-templates select="." mode="name-address">
<xsl:with-param name="name" select="substring-after(., ';')"/>
<xsl:with-param name="address" select="substring-after(following-sibling::*[1][self::Address], ';')"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
出力:
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<LINE>
<Name>Name1</Name>
<Address>Address1</Address>
</LINE>
<LINE>
<Name>Name2</Name>
<Address>Address2</Address>
</LINE>
<LINE>
<Name>Name3</Name>
<Address>Address3</Address>
</LINE>
<LINE>
<Name>Name4</Name>
<Address>Address4</Address>
</LINE>
</XML>