何よりもまず、ソースxmlにルート要素が含まれているはずなので、次のように変更しました。
ソースXML
<rows>
<row>
<column1>
ABC
</column1>
<column2>
ABC
</column2>
</row>
<row>
<column1>
123
</column1>
<column2>
123
</column2>
</row>
<row>
<column1>
234
</column1>
<column2>
234
</column2>
</row>
</rows>
必要なXslt
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="rows">
<xsl:for-each select="row">
<xsl:if test="position() = 1">
<div class="firstrow">
<xsl:call-template name="PrintColumnValues"></xsl:call-template>
</div>
</xsl:if>
<div class="tabpanel">
<xsl:call-template name="PrintColumnValues"></xsl:call-template>
</div>
</xsl:for-each>
</xsl:template>
<xsl:template name="PrintColumnValues">
<xsl:value-of select="column1"/>
<xsl:value-of select="column2"/>
</xsl:template>
</xsl:stylesheet>
このxsltを使用してソースxmlを変換した後、目的のhtml出力が得られます。
注:ここでのヘルプとして、xslt変換に使用できるコードを追加しています。
public static string TransformContentXmlwithXslt(XmlDocument xmlDocument, string xsltFileName)
{
//Load the XML data document
MemoryStream contentStream = new MemoryStream();
xmlDocument.Save(contentStream);
contentStream.Position = 0;
XPathDocument mergedXPathDocument = new XPathDocument(contentStream);
XsltSettings xsltJsSetting = new XsltSettings();
xsltJsSetting.EnableScript = true;
//Load the XSLT file
string xsltFilePath = xsltFileName;
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltFilePath, xsltJsSetting, new XmlUrlResolver());
//Do the transformation
MemoryStream transformedContentMemoryStream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(transformedContentMemoryStream, Encoding.UTF8);
StreamReader streamReader = new StreamReader(transformedContentMemoryStream);
xslt.Transform(mergedXPathDocument, writer);
transformedContentMemoryStream.Position = 0;
string transformedHtml = streamReader.ReadToEnd();
//// Close the connections
streamReader.Close();
transformedContentMemoryStream.Close();
return transformedHtml;
}
ここにxsltFileName
は、完全なファイルパスが含まれている必要があります。
このメソッドを呼び出すことにより、変換された出力を取得できます。