使用C#在XSL文件中检索参数

时间:2017-02-09 14:44:59

标签: c# xslt

在下面的代码段中,我正在尝试使用C#来检索值的select 变量。我想打开一系列XSL文件并动态获取这些字段名称的列表,如下所示:

txtAdditionalInfo

txtFormattedDate

因此用户可以添加自己的值以与XSL合并。如何检索这些名称?

由于

卡尔

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/Document">
    <html>
      <head>
      </head>
      <body>
        <table>
          <tr>
            <td width="75"></td>
            <td>
              <table width="660" border="0">
                  <tr>
                    <td colspan="2" style='font-size:12.0pt;font-family:"Arial";text-align:left'>
<xsl:value-of select="txtAdditionalInfo"/> 
                      <br /><br />
                      <br />
                    </td>
                  </tr>

                  <tr>
                    <td align="left" height="32" valign="bottom">
                    </td>
                    <td align="left" height="32" valign="bottom" style='font-size:12.0pt;font-family:"Arial";text-align:left'>
<xsl:value-of select="txtFormattedDate"/>
                    </td>

2 个答案:

答案 0 :(得分:2)

只是为了获得文本(任务的简单部分)你可以3种方式(甚至更多):

  1. 阅读每一行&amp;解析包含“xsl:value-of”的内容:
  2. 这个代码非常容易,例如:

    string[] lines = System.IO.File.ReadAllLines("File.xls");
    foreach(string line in lines)
    {
        if((line).Trim().StartsWith("<xls:value-of"))
        {
            Console.WriteLine(line.Split(new[]{" select=\"", "\"/>"},
                          StringSplitOptions.RemoveEmptyEntries)[0]);
        }
    }
    

    如果<xsl:value-of将在单独的行上,则应写出所有“值”。如果不是,你可以调整上面的代码来获得预期的结果。

    1. 使用正则表达式解析文档&amp;找到确切的行:
    2. 这个需要一些关于Regex(规则表达式)的知识。 您也可以尝试在线示例执行此操作:

      string xls = System.IO.File.ReadAllText("File.xls");
      string pattern = @"<xsl:value-of\s+select="(\w+)"\s*\/>";
      var lResult = Regex.Match(xls, pattern);
      
      if(lResult.Success)
          foreach( var iGroup in lResult.Groups)
              Console.WriteLine(iGroup);
      

      在线示例:https://regex101.com/r/uViRnx/1 (我没有在实际代码中测试,可能需要很少的调整)

      1. 将整个文件解析为XML文件:
      2. 这部分是最难的,但可能会给你最大的优势,它你想进一步修改文件。您应该将XLS文档作为XML文件加载到XLS object或您自己的对象中 - &gt;此过程称为Deserialization

        有一个关于XML反序列化的主题:How to Deserialize XML document

        有一个主题如何阅读XLS文档: https://www.codeproject.com/Tips/801032/Csharp-How-To-Read-xlsx-Excel-File-With-Lines-of

答案 1 :(得分:0)