在下面的代码段中,我正在尝试使用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>
答案 0 :(得分:2)
只是为了获得文本(任务的简单部分)你可以3种方式(甚至更多):
xsl:value-of
”的内容: 这个代码非常容易,例如:
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
将在单独的行上,则应写出所有“值”。如果不是,你可以调整上面的代码来获得预期的结果。
这个需要一些关于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 (我没有在实际代码中测试,可能需要很少的调整)。
这部分是最难的,但可能会给你最大的优势,它你想进一步修改文件。您应该将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)