在我的xslt中,我有一段C#代码:
public string CleanForTableTags(string pContent){
string input = String.Concat("<root>", pContent, "</root>");
System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(input, System.Xml.Linq.LoadOptions.PreserveWhitespace);
var valueWithinTags = doc.Root.Element("table").ToString();
string[] values = Regex.Matches(valueWithinTags, @"<.*?>")
.Cast<Match>()
.Select(o => o.Groups[0].Value)
.ToArray();
System.Guid d = System.Guid.NewGuid();
string s = pContent.Replace(valueWithinTags, d.ToString());
return s;
}
你可以看到我使用:System.Xml.Linq
在我的webconfig中我得到了:
<compilation debug="true">
<assemblies>
<add assembly="WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
</compilation>
我仍在接受:
名称空间'System.Xml'中不存在类型或命名空间名称'Linq'(您是否缺少程序集引用?)
我做错了什么?
我正在使用VS 2008.所有Dll的路径都是正确的,如果我使用同一个类的代码,它可以正常工作,但是一旦在xslt中使用它,我就会得到错误
下一个问题:
现在它失败了
string[] values = Regex.Matches(valueWithinTags, @"<.*?>")
.Cast<Match>()
.Select(o => o.Groups[0].Value)
.ToArray();
'System.Text.RegularExpressions.MatchCollection' does not contain a definition for 'Cast' and no extension method 'Cast' accepting a first argument of type 'System.Text.RegularExpressions.MatchCollection' could be found (are you missing a using directive or an assembly reference?)
答案 0 :(得分:4)
“xslt内部”究竟是什么意思?
XSLT只是一个包含转换的xml文件。或者您使用msxsl
命名空间来使用C#包含一段脚本吗?
在这种情况下,您可能需要包含<msxsl:assembly name="System.Xml.Linq" />
以及在转换文件中使用<msxsl:using namespace="System.Xml.Linq" />
。
以下是如何在转换中包含一段脚本的示例:http://docs.composite.net/FAQ/Developer?q=How+to+run+CSharp+function+in+XSLT%3F
关于第二部分,关于Cast<>
,这是System.Linq.Enumerable
中的扩展方法,因此将System.Linq
命名空间添加为“使用”应该足够了(同时确保{{1} }也包含在一个程序集中。