- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有以下代码需要从 VS 2003 (.Net 1.1) 迁移到 VS 2008 (.Net 2+)但我收到编译错误 -
System.Xml.Xsl.XslTransform' 已过时:此类已被弃用。我可能需要改用 System.Xml.Xsl.XslCompiledTransform。但是我没有找到可以与原始代码的所有参数一起使用的匹配 Load() 和 Transform() 重载版本。
在 MSDN [How to: Migrate Your XslTransform Code] 中我只找到了一些更简单的案例。 http://msdn.microsoft.com/en-us/library/aa983475%28VS.80%29.aspx但是在我的代码中我看到一些注释暗示添加的参数是用来避免异常的,所以我更喜欢使用这些参数。
有人可以帮忙迁移这段代码吗?
谢谢,阿塔拉
' ----------------------------------------------------------------------
' VS 2003 code:
' ----------------------------------------------------------------------
. . .
Dim myXslDoc As Xml.XmlDocument
' ----------------------------------------------------------------------
Public Sub mcSetParameters(ByVal srcFileName As String)
' ----------------------------------------------------------------------
Me.myXslDoc = New Xml.XmlDocument
Me.myXslDoc.Load(srcFileName)
End Sub
' ----------------------------------------------------------------------
Public Sub mcSetHtml()
' ----------------------------------------------------------------------
Dim oXPathNav As System.Xml.XPath.XPathNavigator = xmlDoc.DocumentElement.CreateNavigator()
Dim sbContent As New System.Text.StringBuilder
Dim swContent As New System.IO.StringWriter(sbContent)
Dim args As New System.Xml.Xsl.XsltArgumentList
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Try
' Try to avoid "Invalid site" exception, by using XmlUrlResolver and Evidence.
' If the XSLT stylesheet . . . comes from a code base that you trust, Then use Me.GetType().Assembly.Evidence()
Dim resolver As System.Xml.XmlUrlResolver = New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim xslt As System.Xml.Xsl.XslTransform = New System.Xml.Xsl.XslTransform
xslt.Load(Me.myXslDoc, resolver, Me.GetType().Assembly.Evidence())
xslt.Transform(oXPathNav, args, swContent, Nothing)
Catch ex As Exception
Debug.WriteLine("Exception: {0}", ex.ToString())
End Try
DoSomething(sbContent.ToString())
End Sub
' ----------------------------------------------------------------------
在我的旧代码中,我同时拥有 xmlDoc 和 xslDoc,所以我现在的编译代码(尚未测试)是:
' ------------------------------------------ ------------------------
' VS 2008 试用代码:
' ------------------------------------------ --------------------------
Dim sbContent As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim swContent As System.IO.StringWriter = New System.IO.StringWriter(sbContent)
Dim contentWriter As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(swContent)
Dim args As New System.Xml.Xsl.XsltArgumentList()
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Try
Dim resolver As New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim evidence As System.Security.Policy.Evidence = Me.GetType().Assembly.Evidence
Dim secureResolver As New System.Xml.XmlSecureResolver(resolver, evidence)
Dim settings As New System.Xml.Xsl.XsltSettings(False, True)
Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
xslt.Load(Me.myXslDoc, settings, secureResolver)
xslt.Transform(xmlDoc, args, contentWriter)
Catch ex As Exception
Debug.WriteLine("Exception: {0}", ex.ToString())
End Try
DoSomething(sbContent.ToString())
最佳答案
XsltCompiledTransform
类不再直接公开这些额外参数。您现在可以使用您喜欢的任何 XmlReader
加载转换。
如果您需要额外的安全性,则创建一个使用 XmlSecureResolver
的 XmlReader
:
Private MyXslDoc As String = "XslFilePath"
Public Sub LoadTransform(ByVal paramVal1 As Object, ByVal paramVal2 As Object)
Dim args As New System.Xml.Xsl.XsltArgumentList
args.AddParam("paramName1", "", paramVal1.ToString)
args.AddParam("paramName2", "", paramVal2.ToString)
Dim resolver As New System.Xml.XmlUrlResolver
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim evidence As Evidence = Me.GetType().Assembly.Evidence
Dim secureResolver As New XmlSecureResolver(resolver, evidence)
Dim settings As New XmlReaderSettings
settings.XmlResolver = secureResolver
Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
Using transformReader As XmlReader = XmlReader.Create(Me.MyXslDoc, settings)
xslt.Load(transformReader)
End Using
Using documentReader As XmlReader = XmlReader.Create(documentUri)
Dim sbContent As New System.Text.StringBuilder
Using swContent As New System.IO.StringWriter(sbContent)
Using contentWriter As XmlWriter = XmlWriter.Create(swContent)
xslt.Transform(documentReader, args, contentWriter, Nothing)
End Using
End Using
End Using
End Sub
关于xml - 如何从 XslTransform 迁移到 XslCompiledTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2442252/
我有一个包含 805 模板的大型 XSLT 文件,根据系统和环境,该文件会因堆栈溢出而失败。 开发环境为 Windows 7、InfoPath 2010 和 C#。尽管安装了 .NET 4.0,但此版
MSDN for .NET System.Xml.Xsl.XslCompiledTransform 类状态: Thread Safety [1] The XslCompiledTransform ob
我在搞乱编码。 一方面,我有一个以 UTF-8 格式响应我的 url(我非常确定,感谢 firebug 插件)。 我使用以下代码打开读取 UTF-8 内容的 url: StreamReader rea
XslTransform 似乎已被 Microsoft 弃用,而支持 XslCompiledTransform。从理论上讲,如果我在应用程序执行期间只进行一次转换,那么解释 XSLT(通过 XslTr
使用以下代码: XDocument transformedDoc = new XDocument(); using (XmlWriter writer = transformedDoc
我正在尝试使用 XslCompiledTransform,并将输出用作 XPathDocument。 有什么想法吗? 最佳答案 先生。琼斯的回答对我很有帮助,但我发现最后一行不起作用。我最终这样做了:
不幸的是,我正在开发一个对所有内容都使用 XSL 的网站。表现可怕。花在 JIT 上的时间大约是 30%! 我一直认为这家公司需要 4 台服务器来运行其小站点这一事实归结为 XSL,但我终于做了一个适
我想读取一个 xml 文件,应用一个转换,然后写入另一个文件。我能想到的最好的方法是: using (XmlTextReader reader = new XmlTextReader(new File
我正在尝试将大型应用程序从 XslTransform 迁移到已编译的 xsl 文件和 XslCompiledTransform。 应用程序使用 Xsl 创建 HTML 文件,转换数据 (Xml) 通过
我正在使用 XslCompiledTransform 将 XML 文件转换为 HTML。有什么方法可以阻止它使用自闭合标签。 例如 无论我使用哪种浏览器,span 上的自闭合标签都会弄乱我的文
为 制作了一个带有输出指令的 xslt 模板: 在 xsl-debug 中我接收正确 在 html 之上。 但是当我使用 XslCompiledTransform 等时..输出开始于 因此,缺
我有一个 XslCompiledTransform对象,我希望输出为 XmlReader对象,因为我需要通过第二个样式表传递它。我有点困惑 - 我可以成功转换一些 XML 并使用 StreamRead
我试了又试,但我无法在不从磁盘加载样式表(通过将 URI 传递到 XslCompiledTransform.Load() 方法)的情况下进入 XslCompiledTransform。 我完全清楚,如
我有以下代码需要从 VS 2003 (.Net 1.1) 迁移到 VS 2008 (.Net 2+)但我收到编译错误 - System.Xml.Xsl.XslTransform' 已过时:此类已被弃用
我有以下代码,我想使用UTF-8编码格式输出xml数据。但它始终以 UTF-16 格式输出数据: XslCompiledTransform xslt = new XslCompiled
我正在尝试在 Excel 中获取一张表并使用 VBA 创建一个 XML 文档,然后使用 XSLT 样式表转换该文档。 我已经包含了下面的代码,直到我遇到问题为止。 当我尝试像这样创建一个对象时: Di
有人能告诉我为什么会这样吗? 我的 XML 是: some text goes here a top elem today a subnode
以下代码工作并从本地磁盘获取 XSL 和 XML,并将转换后的 XML 返回到变量 Xtransoutput。 Dim XmlInputPath As String = "C:\Any.XML" Di
我使用以下 VB.NET 代码将一些 XML 转换为新的 XML,然后继续处理。这是一次性过程,而不是多次完成的过程,因此据我所知,缓存不会提高效率。 代码有效,但我发现性能问题。我知道性能问题可能与
我有以下 xslt ,我需要使用 xslt 2.0 版功能,如“格式日期”。如何使用 XsltCompiledTransform 类(c#、.net 4.5)声明 Xsl 工作表使用 2.0 版。
我是一名优秀的程序员,十分优秀!