xslt到多个输出和基本输出目录

问题描述 投票:0回答:1

xsl代码如下

<xsl:template match="/">
  <xsl:for-each select="/t:Flow/t:AccountingRecords/t:AccountingRecord">
    <xsl:result-document method="xml" href="UBL-invoice.2.1-{t:Reference}-output.xml">
      <xsl:apply-templates select="."/>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

我的代码是样本中的代码

Processor proc = new Processor();
var comp = proc.NewXsltCompiler();
Xslt30Transformer exe = comp.Compile(new Uri("file:///" + System.IO.Path.GetFullPath("./Styles/style.xslt"))).Load30();

var baseOutUri = new System.Uri(Directory.GetCurrentDirectory());
exe.BaseOutputURI = baseOutUri.AbsoluteUri;
Console.WriteLine(exe.BaseOutputURI);

DocumentBuilder builder = proc.NewDocumentBuilder();
builder.BaseUri = new Uri("file:///" + System.IO.Path.GetFullPath("./ar2.xml"));

XdmNode inp = builder.Build(System.IO.File.OpenRead(System.IO.Path.GetFullPath("./ar2.xml")));

Serializer serializer = proc.NewSerializer();
serializer.SetOutputWriter(Console.Out);

// Transform the source XML and serialize the result document
exe.ApplyTemplates(inp, serializer); // < ==== Exception here

Console.WriteLine写道:

文件:/// d:/开发/ fromSvn / cclb / BAS /斌/调试

但输出产生于:

d:\ dev的\ fromSvn \ cclb \ BAS \ BIN

如果我想解决这个问题,我必须将我的代码修改为:

exe.BaseOutputURI = baseOutUri.AbsoluteUri + "/";

我是对还是错过了什么?

c# xml xslt saxon
1个回答
1
投票

这是URI解析的工作方式。如果基URI是/a/b/c,并且相对URI是w.xml,则解析基URI的相对URI的结果是/a/b/w.xml。解析相对URI的算法是对两个字符串的语法操作,它从不试图弄清楚基本URI /a/b/c是指一个目录,一个普通文件,还是特别是没有。

© www.soinside.com 2019 - 2024. All rights reserved.