XML如下:
<?xml version="1.0" encoding="utf-8"?>
<PERSONS>
<TableA>
<PERSON>
<userid CheckMsg="">1</userid>
<name CheckMsg="">Allen</name>
<age CheckMsg="">1232</age>
</PERSON>
</TableA>
</PERSONS>我想在通过XSLT转换时来判断,例如userid =1,如果此时userid 的值不是数字时,应该在它的属性CheckMsg="wrong"
请问能实现此功能的XSLT该怎么写?
<?xml version="1.0" encoding="utf-8"?>
<PERSONS>
<TableA>
<PERSON>
<userid CheckMsg="">1</userid>
<name CheckMsg="">Allen</name>
<age CheckMsg="">1232</age>
</PERSON>
</TableA>
</PERSONS>我想在通过XSLT转换时来判断,例如userid =1,如果此时userid 的值不是数字时,应该在它的属性CheckMsg="wrong"
请问能实现此功能的XSLT该怎么写?
{
if(int.TryParse(str,0) > 0) //转化为数字成功,则
retrun str; //返回1
else
return "wrong";
}我的例子:
===================================================================================
xsl文件,注意加了xmlns:DateTimeConverter="urn:DateTimeConverter",select="DateTimeConverter:ToDateTimeFormat....<?xml version="1.0" encoding="gb2312"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:DateTimeConverter="urn:DateTimeConverter">
有效期:<xsl:value-of select="DateTimeConverter:ToDateTimeFormat(ExpiredType,ExpiredDate)"/>
===================================================================================
DateTimeConverter.cs文件:
public class DateTimeConverter
{
public string ToDateTimeFormat(string str1, string str2)
{
if (str1 == "1" && Convert.ToDateTime(str2).ToShortDateString() == "2010-11-11")
return "常年有效";
else
return Convert.ToDateTime(str2).ToShortDateString();
}
}
===================================================================================//把XML数据按指定的xsl格式文件转化成字符串表示.
public string XmlToString(XmlDocument xml, string filePath)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;//编写xml声明
settings.ConformanceLevel = ConformanceLevel.Fragment;//设置xml文件符合的一致性级别
settings.CloseOutput = false;//settings关闭时不关闭基础流
StringBuilder sb = new StringBuilder();//需要输出的字符串类
TextWriter tw = new StringWriter(sb);
XmlWriter xw = XmlWriter.Create(tw, settings);
XslCompiledTransform xst = new XslCompiledTransform();
//加载格式化文件
string str = HttpContext.Current.Request.ApplicationPath + "/" + filePath;
xst.Load(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/" + filePath));
//关键是下面这几句//
XsltArgumentList argsList = new XsltArgumentList();
DateTimeConverter converter = new DateTimeConverter();
argsList.AddExtensionObject("urn:DateTimeConverter", converter); //DateTimeConverter为上面的类
//关键是上面这几句 // xst.Transform(xml, argsList, xw);//把转换的结果输出到sb中
return sb.ToString();
}
{
int result = 0;
if (int.TryParse(str, out result)) //转化为数字成功,则
return str; //返回1
else
return "wrong";
}
<?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" encoding="utf-8"/>
<xsl:template match="/">
<xsl:element name="PERSONS">
<xsl:element name="TableA">
<xsl:element name="PERSON">
<xsl:element name="userid"><xsl:value-of select="/PERSONS/TableA/PERSON/userid"/></xsl:element>
<xsl:element name="name"><xsl:value-of select="/PERSONS/TableA/PERSON/name"/></xsl:element>
<xsl:element name="age"><xsl:value-of select="/PERSONS/TableA/PERSON/age"/></xsl:element>
<xsl:element name="error">it is not correct</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template></xsl:stylesheet>
<PERSONS>
<TableA>
<PERSON>
<userid>1</userid>
<name>Allen</name>
<age>28</age>
</PERSON>
<PERSON>
<userid>2</userid>
<name>Keni</name>
<age>28</age>
</PERSON>
<PERSON>
<userid>3</userid>
<name>Jimmy</name>
<age>28</age>
</PERSON>
<PERSON>
<userid>4</userid>
<name>dfd</name>
<age>23</age>
</PERSON>
<PERSON>
<userid>5</userid>
<name>dfdf</name>
<age>26</age>
</PERSON>
<PERSON>
<userid>6</userid>
<name>qq</name>
<age>26</age>
</PERSON>
<PERSON>
<userid>7</userid>
<name>ss</name>
<age>28</age>
</PERSON>
<PERSON>
<userid>8</userid>
<name>uu</name>
<age>21</age>
</PERSON>
</TableA>
</PERSONS>
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.CloseOutput = false;
StringBuilder sb = new StringBuilder();
TextWriter tw = new StringWriter(sb);
XmlWriter xw = XmlWriter.Create(tw, settings);
XPathDocument xdoc = new XPathDocument(@"C:\Documents and Settings\Administrator\CSBDemo\test.xml");
XslCompiledTransform trans = new XslCompiledTransform();
trans.Load(@"C:\Documents and Settings\Administrator\CSBDemo\XSLTFile.xsl"); trans.Transform(xdoc, null, xw);
xw.Close();
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:XslCheck="urn:XslCheck">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
<xsl:element name="PERSONS">
<xsl:element name="TableA">
<xsl:element name="PERSON">
<xsl:element name="userid">
<xsl:attribute name="CheckMsg">
<xsl:value-of select="XslCheck:Check(/PERSONS/TableA/PERSON/userid)"/>
</xsl:attribute>
<xsl:value-of select="/PERSONS/TableA/PERSON/userid" /> </xsl:element>
<xsl:element name="name">
<xsl:attribute name="CheckMsg">
<xsl:value-of select="XslCheck:Check(/PERSONS/TableA/PERSON/name)"/>
</xsl:attribute>
<xsl:value-of select="/PERSONS/TableA/PERSON/name"/> </xsl:element>
<xsl:element name="age">
<xsl:attribute name="CheckMsg">
<xsl:value-of select="XslCheck:Check(/PERSONS/TableA/PERSON/age)"/>
</xsl:attribute>
<xsl:value-of select="/PERSONS/TableA/PERSON/age"/> </xsl:element>
<xsl:element name="error">it is not correct </xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template> </xsl:stylesheet>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class XslCheck
{
public string Check(string str)
{
int result = 0;
if (int.TryParse(str, out result)) //转化为数字成功,则
return str; //返回原来的数,根据实际情况设置
else
return "wrong";
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;using System.Xml;
using System.Xml.Xsl;
using System.Text;
using System.Xml.XPath;
using System.IO;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;//编写xml声明
settings.ConformanceLevel = ConformanceLevel.Fragment;//设置xml文件符合的一致性级别
settings.CloseOutput = false;//settings关闭时不关闭基础流
StringBuilder sb = new StringBuilder();//需要输出的字符串类
TextWriter tw = new StringWriter(sb);
XmlWriter xw = XmlWriter.Create(tw, settings);
XslCompiledTransform xst = new XslCompiledTransform();
xst.Load(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/" + "XSLTFile.xsl")); XsltArgumentList argsList = new XsltArgumentList();
XslCheck check = new XslCheck();
argsList.AddExtensionObject("urn:XslCheck", check);
XmlDocument xml = new XmlDocument();
xml.Load(Server.MapPath("~/test.xml"));//加载数据
xst.Transform(xml, argsList, xw);
Response.Write(Server.HtmlEncode(sb.ToString()));//测试输出 }
}最终生成的结果:<PERSONS><TableA><PERSON><userid CheckMsg="1 ">1 </userid><name CheckMsg="wrong">Allen </name><age CheckMsg="28 ">28 </age><error>it is not correct </error></PERSON></TableA></PERSONS>