我试图解析用XSLT的XML文件。
我需要有一个div标签进行分组的值。 第一行div标签应该有一类特殊的<div class="firstrow">
所有其他行应该有<div class="tabpanel">
。
我如何分配类=“FIRSTROW”的第一行和带class =“一个tabpanel”所有其他行?
源XML
<row>
<column1>ABC</<column1>
<column2>ABC</<column2>
</row>
<row>
<column1>123</<column1>
<column2>123</<column2>
</row>
<row>
<column1>234</<column1>
<column2>234</<column2>
</row>
输出我想
<div class="firstrow">
ABC
ABC
</div>
<div class="tabpanel">
123
123
</div>
<div class="tabpanel">
234
234
</div>
谢谢
像这样简单 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="row[1]">
<div class="firstrow"><xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="row">
<div class="tabpanel"><xsl:value-of select="."/></div>
</xsl:template>
</xsl:stylesheet>
当这个XML文档上应用这一转变 (所提供的一个,取得良好的形成!):
<t>
<row>
<column1>ABC</column1>
<column2>ABC</column2>
</row>
<row>
<column1>123</column1>
<column2>123</column2>
</row>
<row>
<column1>234</column1>
<column2>234</column2>
</row>
</t>
在想,正确的结果产生:
<div class="firstrow">
ABC
ABC
</div>
<div class="tabpanel">
123
123
</div>
<div class="tabpanel">
234
234
</div>
所有的Firt,应该有你的源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
应包含完整的文件路径。
您可以通过调用此方法得到变换后的输出。