首页 > 解决方案 > 加载 XSLT 文档时路径中的非法字符

问题描述

我正在创建一种方法来返回作为 XSLT 转换结果的 HTML 字符串。

当我运行以下代码时,我在以下行中收到 Illegal Characters in Path 错误: xsltTransform.Load(xsltTemplate).

注意我已经通过另一种方法测试了 XSLT 转换并且它可以工作。

private string FormatCreditReport(string inputXml)
{
    var xsltTransform = new XslCompiledTransform();
    var webRootPath = HostingEnvironment.ApplicationPhysicalPath;
    var path = webRootPath
               + "XSLT_Stylesheets"
               + Path.DirectorySeparatorChar
               + "CreditReportTransform.xslt";
    var xsltTemplate = File.ReadAllText(path);

    xsltTransform.Load(xsltTemplate);

    StringWriter results = new StringWriter();
    using (var reader = XmlReader.Create(new StringReader(inputXml)))
    {
        xsltTransform.Transform(reader, null, results);
    }
    return results.ToString();
}

XSLT 文档:

  <table border ="1">

    <tr>
      <th><h2>Credit File</h2></th>
    </tr>
    <tr></tr>
    <tr>
      <td>File Since Date</td>
      <td><xsl:value-of select="EfxTransmit/EfxReport/USConsumerCreditReports/USConsumerCreditReport/USHeader/CreditFile/FileSinceDate"/></td>
    </tr>
    <tr>
      <td>Date of Last Activity</td>
      <td><xsl:value-of select="EfxTransmit/EfxReport/USConsumerCreditReports/USConsumerCreditReport/USHeader/CreditFile/DateOfLastActivity"/></td>
    </tr>
    <tr>
      <td>Date of Request</td>
      <td><xsl:value-of select="EfxTransmit/EfxReport/USConsumerCreditReports/USConsumerCreditReport/USHeader/CreditFile/DateOfRequest"/></td>
    </tr>

    <tr></tr>

    <tr>
      <th><h2>Subject</h2></th>
    </tr>
    <tr>
      <td>Last Name</td>
      <td><xsl:value-of select="EfxTransmit/EfxReport/USConsumerCreditReports/USConsumerCreditReport/USHeader/Subject/LastName"/></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
    </tr>
  </table>

标签: xmlxslt

解决方案


无需调用 File.ReadAllText(path)。只需传递完全限定的文件路径,如下所示:

'var xsltTemplate = File.ReadAllText(path);
xsltTransform.Load(path);

推荐阅读