标签: xslcompiledtransform

如何在从String加载XSL的Transformation中解析XSL包含?

.NET 2.0/VS2005

我正在尝试使用XslCompiledTransform该类来执行XSL转换.我有两个XSL文件,第一个包含对<xsl:include>语句形式的引用:

Main.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:include href="Included.xsl" />
  ...
  ...
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

现在,如果我可以将"Main.xsl"文件本身作为URI加载,我的转换代码就像下面这样简单:

// This is a function that works. For demo only.
private string Transform(string xslFileURI)
{
  XslCompiledTransform xslt = new XslCompiledTransform();

  // This load works just fine, if I provide the path to "Main.xsl".
  // The xsl:include is automatically resolved.
  xslTransform.Load(xslFileURI);

  StringWriter sw = new StringWriter();
  xslt.Transform(Server.MapPath("~/XML/input.xml"), null, sw);
  return sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)

问题是我收到Main.xsl文件的内容为字符串,需要加载字符串作为XmlReader/IXpathNavigable.这是此时的必要限制.当我尝试使用a执行相同操作时XmlReader/XpathDocument,它会失败,因为代码在C:\Program Files\Microsoft Visual Studio …

c# xslt include xslcompiledtransform .net-2.0

6
推荐指数
2
解决办法
1万
查看次数

有没有更有效的方法来转换已经包含对XSLT的引用的XDocument?

我有一个XML文件已经包含对XSLT文件的引用.

我正在考虑根据引用的转换规则转换此XML文件,以便我可以创建一个漂亮的PDF文件.

我似乎可以执行实际的转换System.Xml.Xsl.XslCompiledTransform,但它需要在执行转换之前手动关联XSLT.

基于我所看到的,我现在必须手动从XDocument中提取XSLT引用(下面的粗略开头):

xmlDocument.Document.Nodes()
   .Where(n => n.NodeType == System.Xml.XmlNodeType.ProcessingInstruction)
Run Code Online (Sandbox Code Playgroud)

但是,由于XSLT 在XML文件本身中引用,因此我假设我做了太多工作,并且有一种更有效的方法来应用转换.

有,或者这是一个人必须做的?

c# xml xslt .net-4.0 xslcompiledtransform

6
推荐指数
1
解决办法
996
查看次数

如何从XslTransform迁移到XslCompiledTransform

我有以下代码,我需要从VS 2003(.Net 1.1)迁移到VS 2008(.Net 2+),但我得到编译错误 -

System.Xml.Xsl.XslTransform'已过时:已弃用此类.我可能需要使用System.Xml.Xsl.XslCompiledTransform.但我没有找到匹配的Load()和Transform()重载版本,我可以使用我的原始代码的所有参数.

在MSDN [如何:迁移您的XslTransform代码]我只发现了一些更简单的案例. 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 …
Run Code Online (Sandbox Code Playgroud)

xml vb.net xmldocument xslcompiledtransform

5
推荐指数
1
解决办法
4689
查看次数

使用xsltc.exe XslCompiledTransforms时,如何解析具有相对路径的<xsl:import>和<xsl:include>元素?

作为我们的Web应用程序构建过程的一部分,我已经设置了我们的XSLT样式表,只要我们运行完整的编译,就可以使用Microsoft的xsltc.exe编译器构建.在本地开发期间,这很有效,因为代码是在同一位置编译和托管的.但是,一旦将其放在构建服务器上,就会出现问题.

构建服务器将像在本地一样编译XSLT样式表,但随后会运行一个脚本,将编译后的代码部署到我们的内部登台Web服务器.一旦这些二进制文件从编译它们的位置移开,相关路径<xsl:import><xsl:include>元素就不再正确解析,从而导致在运行XSLT样式表时看起来像这样的异常.

Could not find a part of the path 'e:\{PATH}\xslt\docbook\VERSION'.
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
    at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, …
Run Code Online (Sandbox Code Playgroud)

c# xslt xslcompiledtransform

5
推荐指数
1
解决办法
3480
查看次数

XslCompiledTransform和自定义XmlUrlResolver:"具有相同键的条目已存在"

有没有办法调试由自定义XmlUrlResolver从数据库加载的XSLT文档,或者有人知道,下面的错误消息是什么?

我有一个XSLT样式表,可以导入一个常见的xslt文档:

<xsl:import href="db://common.hist.org"/>
Run Code Online (Sandbox Code Playgroud)

该方案由一个XmlResolver从数据库加载XSLT文档的自定义处理,但是我收到一个错误:

已存在具有相同密钥的条目.

它引用的通用XSLT文档xsl:import包含一些常见的XSLT模板,每个模板都有一个唯一的名称.

将XSLT文档从本地文件系统移动到数据库后,此错误开始发生.使用指向本地文件的默认导入方案时以及从本地文件系统加载XSLT文档时,不会发生错误.

我还尝试在创建实例时启用调试XslCompiledTransform,但不知何故,不可能"进入"基于数据库的XSLT.

_xslHtmlOutput = new XslCompiledTransform(XSLT_DEBUG);
Run Code Online (Sandbox Code Playgroud)

更新:以下基本上是请求的解析器​​代码,但我的代码中没有发生异常; 因此我想在下面的代码中没有明显的原因.(这个相同的代码实际上用于加载包含导入的XSLT样式表,当注释掉导入时,一切都按预期工作.)

public class XmlDBResolver : XmlUrlResolver
{
    private IDictionary<string,string> GetUriComponents(String uri)
    {
        bool useXmlPre = false;
        uri = uri.Replace("db://", "");
        useXmlPre = uri.StartsWith("xml/");
        uri = uri.Replace("xml/", "");
        IDictionary<string, string> dict = new Dictionary<string, string>();
        string app = null, area = null, subArea = null;

        if (!String.IsNullOrWhiteSpace(uri))
        {
            string[] components = uri.Split('.');

            if (components == null)
                throw new Exception("Invalid Xslt …
Run Code Online (Sandbox Code Playgroud)

c# xml sql-server xslt xslcompiledtransform

5
推荐指数
1
解决办法
3261
查看次数

具有多个XML输入文件的XSLT转换

是否可以对多个输入XML文件执行转换?

它似乎不可能使用XslCompiledTransform,但是有没有其他方法来应用XSLT?

c# xml xslt xslcompiledtransform

2
推荐指数
1
解决办法
4670
查看次数

方法名称中的连字符,是否可以在任何.NET语言中使用?

我需要支持名为'send-request'的方法作为在XSLT转换中使用的扩展函数.这是由扩展对象提供的XslCompiledTransform.关于扩展对象的酷炫之处<msxsl:script>是,我不必使用<msxsl:script>,只需声明命名空间并调用函数即可.不好的是,函数名称必须与CIL方法名称完全匹配.

所以,我想知道,是否有一种.NET语言支持方法名称中的连字符?不需要CLS合规性,使用反射调用该方法.

或者,我可以使用一些修改程序集IL的技术来更改方法名称吗?

或者,有没有办法拦截反射GetMethod调用并欺骗调用者方法'send-request'存在,但返回'SendRequest'方法呢?

.net clr xslcompiledtransform

2
推荐指数
1
解决办法
1070
查看次数

要在 HTML 控件中显示的 XML 元素中的空格

我正在使用 C# 3.5。我有一个传递给 XslCompiledTransform 对象的 XML 字符串。然后我在 WebBrowser 中显示输出。除了 XML 元素包含我需要在 WinForms HTML 浏览器中显示的额外空格之外,一切都很好。我不能在 html 中使用任何 javascript。这是一个示例 XML 元素:

<myelement>Here is where           extra spaces need to be retained</myelement>
Run Code Online (Sandbox Code Playgroud)

我尝试替换字符串“”,"&nbsp;"但这使得 XslCompiledTransform 对象用来转换的 xml 无效(XML 无效)。然后我尝试用“”替换,"&amp;nbsp"但文本&amp;nbsp;出现在我的 html 中而不是空格中。我怎样才能让多余的空格出现?

html c# xml xslt xslcompiledtransform

2
推荐指数
1
解决办法
1087
查看次数

XSLT剥离评论

我有一个奇怪的问题.使用PHP进行XSLT转换,出于某种原因,打印给用户的已编译模板文件会从代码中删除所有注释.这从未发生过,根本无法调试此问题.即使在源$ xslt-> transformToXML($ xml)中,它也会被剥离注释,而不是之前的注释.

对于包含在<! - - >中的JS块,这尤其令人讨厌.

有任何想法吗?

php xslt xslcompiledtransform

-3
推荐指数
1
解决办法
494
查看次数