Saxon XSLT.Net转换:当xml和xsl都作为字符串传递时,在BaseURI中给出什么

Saxon XSLT.Net转换:当xml和xsl都作为字符串传递时,在BaseURI中给出什么,xslt,xslt-1.0,xslt-2.0,saxon,Xslt,Xslt 1.0,Xslt 2.0,Saxon,这是我对XSLT文件进行Saxon转换的代码,它接受xml和XSLT并返回转换后的字符串。我可以通过这个函数处理xsl 1.0或2.0 DocumentBuilder需要BaseURI,即使我没有任何文件格式。我已经提供了“c:\\”作为BaseURI,尽管我与此目录无关 有没有更好的方法来实现这个功能或编写这个函数 public static string SaxonTransform(string xmlContent, string xsltContent) { // Create

这是我对XSLT文件进行Saxon转换的代码,它接受xml和XSLT并返回转换后的字符串。我可以通过这个函数处理xsl 1.0或2.0

DocumentBuilder
需要
BaseURI
,即使我没有任何文件格式。我已经提供了
“c:\\”
作为
BaseURI
,尽管我与此目录无关

有没有更好的方法来实现这个功能或编写这个函数

public static string SaxonTransform(string xmlContent, string xsltContent)
{
    // Create a Processor instance.
    Processor processor = new Processor();

    // Load the source document into a DocumentBuilder
    DocumentBuilder builder = processor.NewDocumentBuilder();

    Uri sUri = new Uri("c:\\");

    // Now set the baseUri for the builder we created.
    builder.BaseUri = sUri;

    // Instantiating the Build method of the DocumentBuilder class will then
    // provide the proper XdmNode type for processing.
    XdmNode input = builder.Build(new StringReader(xmlContent));

    // Create a transformer for the stylesheet.
    XsltTransformer transformer = processor.NewXsltCompiler().Compile(new StringReader(xsltContent)).Load();

    // Set the root node of the source document to be the initial context node.
    transformer.InitialContextNode = input;


    StringWriter results = new StringWriter();

    // Create a serializer.
    Serializer serializer = new Serializer();
    serializer.SetOutputWriter(results); 

        transformer.Run(serializer);

    return results.ToString();
}

如果您认为基本URI永远不会被使用(因为您从不做任何依赖于基本URI的事情),那么最好的策略是设置一个基本URI,例如,如果您的假设被证明是错误的,那么该基本URI将立即被识别。”file:///dummy/base/uri“


选择一个合法的URI(C:\is not)。

如果你认为基本URI永远不会被使用(因为你永远不会做任何依赖于基本URI的事情),那么最好的策略就是设置一个基本URI,例如,如果你的假设被证明是错误的,那么它将立即被识别。”file:///dummy/base/uri“


选择一个合法的URI(C:\不是)。

谢谢Michael。还有一件事。在XSLT1.0文档中创建自定义XSLT2.0特定函数并用saxon进行处理可以吗?可以。值得一读的是XSLT 1.0处理器如何处理标记为version=“2.0”(向前兼容模式)的代码,以及XSLT 2.0处理器如何处理标记为version=“1.0”(向后兼容模式)的代码。请提供相关链接?另外,如果我使用xslt 1.0版样式表,但通过Saxon这样的2.0处理器进行转换,我可以完全删除node-set()函数引用吗?Saxon不需要它吗?有关向前/向后兼容性的参考,请阅读W3C规范,或阅读我的书XSLT2.0程序员参考。Re-exlst:node-set(),是的,这在2.0中是不需要的。谢谢Michael。还有一件事。在XSLT1.0文档中创建自定义XSLT2.0特定函数并用saxon进行处理可以吗?可以。值得一读的是XSLT 1.0处理器如何处理标记为version=“2.0”(向前兼容模式)的代码,以及XSLT 2.0处理器如何处理标记为version=“1.0”(向后兼容模式)的代码。请提供相关链接?另外,如果我使用xslt 1.0版样式表,但通过Saxon这样的2.0处理器进行转换,我可以完全删除node-set()函数引用吗?Saxon不需要它吗?有关向前/向后兼容性的参考,请阅读W3C规范,或阅读我的书XSLT2.0程序员参考。Re-exlst:node-set(),是的,在2.0中不需要这样做。