1

这是我用于 XSLT 文件的撒克逊转换的代码,它接受 xml 和 xslt 并返回转换后的字符串。我可以通过这个函数处理 xsl 1.0 或 2.0。

DocumentBuilder需要 a 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();
}
4

1 回答 1

1

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

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

于 2013-10-12T15:39:09.080 回答