我有一个进程正在接收成对出现的文件。一个是ctr文件,另一个是数据文件。除了扩展名不同之外,ctr 和数据文件将始终具有相同的名称。例如。 dfghj.ctl 和 dfghj.dat
我遇到的问题是我同时收到多个这样的对。区分哪个是哪个的唯一方法是查看 ctl 文件。这告诉我与之相关的 .dat 文件是 report.jsonl 文件还是 delta.jsonl 文件。
.ctl 的示例是:
<DTSControl>
<Version>1.0</Version>
<AddressType>DTS</AddressType>
<MessageType>Data</MessageType>
<From_DTS>x26OT075</From_DTS>
<To_DTS>x26OT075</To_DTS>
<Subject>ECDS Submission</Subject>
<LocalId>TEST-delta.jsonl</LocalId>
<WorkflowId>SUS_CDS</WorkflowId>
<Encrypted>N</Encrypted>
<Compress>Y</Compress>
</DTSControl>
我需要访问的是 LocalId,它告诉我 .dat 是什么类型的文件,因此我需要将其加载到哪个表。一旦我知道哪个文件是哪个文件,我就需要将关联的 .dat 文件名传递给变量以填充源连接。
我唯一能想到的是一个加载ctl文件的脚本任务,隔离LocalId,如果它像*-report.jsonl,那么去掉文件的最后三个字符,并用dat替换ctl并传递它字符串到变量,但我不知道如何获取 LocalId,因为我不使用 c#。
有谁能指点一下如何到达那里吗?它可能并不总是第八行,所以我更愿意告诉它使用不会改变的 LocalID。
提前致谢
最佳答案
尝试 xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
string xml =
"<DTSControl>" +
"<Version>1.0</Version>" +
"<AddressType>DTS</AddressType>" +
"<MessageType>Data</MessageType>" +
"<From_DTS>x26OT075</From_DTS>" +
"<To_DTS>x26OT075</To_DTS>" +
"<Subject>ECDS Submission</Subject>" +
"<LocalId>TEST-delta.jsonl</LocalId>" +
"<WorkflowId>SUS_CDS</WorkflowId>" +
"<Encrypted>N</Encrypted>" +
"<Compress>Y</Compress>" +
"</DTSControl>";
XDocument doc = XDocument.Parse(xml);
string localId = (string)doc.Descendants("LocalId").FirstOrDefault();
}
}
}
关于c# - 从 XML 文件读取源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717291/