C# .NET Xsl脚本转换结果为';System.Object';未定义或导入
XSL noobie但完全卡住了 我有一个使用c#脚本函数格式化日期的转换,当我在VS2008中运行“ShowXMLOutput”时,它可以很好地工作,输出正是我想要的 但是,当我尝试使用代码运行此程序时,会出现错误 预定义类型“System.Object”不可用 定义的或导入的 调用转换的函数看起来是这样的,它非常基本,在我开始使用脚本之前就已经工作了 XSL转换如下所示C# .NET Xsl脚本转换结果为';System.Object';未定义或导入,c#,scripting,xslt,xslcompiledtransform,C#,Scripting,Xslt,Xslcompiledtransform,XSL noobie但完全卡住了 我有一个使用c#脚本函数格式化日期的转换,当我在VS2008中运行“ShowXMLOutput”时,它可以很好地工作,输出正是我想要的 但是,当我尝试使用代码运行此程序时,会出现错误 预定义类型“System.Object”不可用 定义的或导入的 调用转换的函数看起来是这样的,它非常基本,在我开始使用脚本之前就已经工作了 XSL转换如下所示 无法复制(实际上,您并没有在xslt中实际使用扩展)。我测试了它,添加了(xslt): 它工作得很好(我改为XmlCon
无法复制(实际上,您并没有在xslt中实际使用扩展)。我测试了它,添加了(xslt):
它工作得很好(我改为XmlConvert.ToDateTime
以匹配xsd格式,但无论哪种方式都可以)
如果有问题,您没有向我们展示代码。这里有一个更简单的示例(很抱歉输入错误),这同样适用于VS2008,仅针对样式表运行XML,但使用我得到的C代码
未定义或导入预定义类型“System.Object”
代码
xml就是这样
11/11/2009
11/11/2009
转变是这样的
http://www.a-website.com
我知道这个问题由来已久,但也许这对正在寻找这个问题的人有所帮助
我现在变成了同样的编译错误,但是在C#编程的完全不同的主题中
我使用的是夏普开发4.2,也有同样的问题。对我来说,解决办法是添加
“mscorlib”指项目的参考资料。
此错误是Microsoft的已知问题,但不知道当前情况。刚刚找到一些2010年的讨论
不知怎的,这个引用丢失了,我现在不完全理解为什么我的其他项目在没有明确引用mscorlib的情况下工作,但也许这确实是错误本身;-)
致意
Thomas关于信息,xsd datetime(IMO)与XmlConvert配合使用会更好。ToDateTime
。在上缺少
对我来说很好:http://www.a-website.com2009-11-11T00:00:00http://www.a-网址:com2009-11-11T00:00:00
hmm天哪,我想知道那是什么问题。XSL看起来不错,.NET几乎是MSDN示例中的剪切粘贴,.NET安装问题??抓住这里的稻草,我尝试将mscorlib添加到项目的引用中,但没有成功。非常感谢。
public static string RunXSLT(string xsltFile, string inputXML)
{
XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableScript = true;
transform.Load(xsltFile, settings, null);
StringReader sReader = new StringReader(inputXML);
XmlTextReader xmlTextReader = new XmlTextReader(sReader);
//Create an XmlTextWriter which outputs to memory stream
Stream stream = new MemoryStream();
XmlWriter xmlWriter = new XmlTextWriter(stream,> System.Text.Encoding.UTF8);
transform.Transform(xmlTextReader, xmlWriter);
stream.Position = 0;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(stream);
return XmlDoc.OuterXml;
}
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:nlbExtension="urn:nlbExtension"
exclude-result-prefixes="msxsl nlbExtension">
<xsl:output method="xml" indent="yes"/>
<msxsl:script implements-prefix="nlbExtension" language="C#">
<![CDATA[
public string FormatDateTime(string xsdDateTime, string format)
{
DateTime date = DateTime.Parse(xsdDateTime);
return date.ToString(format);
}
]]>
</msxsl:script>
<xsl:template match="/">
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
<xsl:for-each select="./Collection/Content" >
<url>
<loc>http://www.nlb.org<xsl:value-of select="./QuickLink/text()"/></loc>
<lastmod><xsl:value-of select="./DateModified/text()" /></lastmod>
</url>
</xsl:for-each>
</urlset>
</xsl:template>
</xsl:stylesheet>
<xsl:value-of select="nlbExtension:FormatDateTime(.,'dd MMM yyyy')"/>
string xml = new XElement("xml", DateTime.Now).ToString();
public void RunFileXSLT()
{
// Open books.xml as an XPathDocument.
XPathDocument doc = new XPathDocument("c:\\temp\\raw.xml");
// Create a writer for writing the transformed file.
XmlWriter writer = XmlWriter.Create("c:\\temp\\OutputTest.xml");
// Create and load the transform with script execution enabled.
XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableScript = true;
transform.Load("c:\\temp\\Simple.xslt", settings, null);
// Execute the transformation.
transform.Transform(doc, writer);
}
<xml>
<item>
<date>11/11/2009</date>
</item>
<item>
<date>11/11/2009</date>
</item>
</xml>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:nlbExtension="urn:nlbExtension"
exclude-result-prefixes="msxsl nlbExtension">
<xsl:output method="xml" indent="yes"/>
<msxsl:script implements-prefix="nlbExtension" language="C#">
<![CDATA[
public string FormatDateTime(string xsdDateTime, string format)
{
DateTime date = DateTime.Parse(xsdDateTime);
return date.ToString(format);
}
]]> </msxsl:script>
<xsl:template match="/">
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
<xsl:for-each select="./xml/item" >
<url>
<loc>http://www.a-website.com</loc>
<lastmod>
<xsl:value-of select="nlbExtension:FormatDateTime(./date,'s')"/>
</lastmod>
</url>
</xsl:for-each>
</urlset>