Saxon XSLT.Net转换:当xml和xsl都作为字符串传递时,在BaseURI中给出什么
这是我对XSLT文件进行Saxon转换的代码,它接受xml和XSLT并返回转换后的字符串。我可以通过这个函数处理xsl 1.0或2.0Saxon 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
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中不需要这样做。