如何在生成时删除 XML 中的类型

本文关键字:XML 类型 删除 | 更新日期: 2023-09-27 18:33:44

我在文本文件中有 1000 条记录。我的要求是将数据插入SQL Server。为此,如果我可以转换为XML或推送到脚本组件也可以。

源文本文件包含这种格式...

[{"ID":1,"Name":"test1","State":"AP"},{"ID":2,"Name":"test2","State":"KN"},{"ID":3,"Name":"test3","State":null}]

String json = System.IO.File.ReadAllText(@"C:'t1.txt");
byte[] bytes = Encoding.ASCII.GetBytes();
using (var stream = new MemoryStream(bytes))
{
  var quotas = new XmlDictionaryReaderQuotas();
  var jasonreader - JsonReaderWriterFactory.CreateJasonReader(stream,quotas);
  var xml = XDocument.Load(jsonreader);
  xmlDocument xd = new XmlDocument();
  using (steamwriter fs = new streamwriter(@"C:'t.xml");
{
  fs.write(xml);
}
  console.writeLine(xml);
}

输出-

<root type="array"
  <item type="object">
     <ID type="number">1</ID>
     <Name type="string">test1</Name>
     <State type="string">AP</State>
  </item>
<item type="object">
<root type="array"
  <item type="object">
     <ID type="number">2</ID>
     <Name type="string">test2</Name>
     <State type="string">KN</State>
  </item>
<item type="object">
<root type="array"
  <item type="object">
     <ID type="number">3</ID>
     <Name type="string">test3</Name>
     <State type="string"></State>
  </item>
</root>

当我使用 SSIS XML 源任务时,我正在获取列...

外部列:

type
text
item_id

输出列:

type
text
item_id

理想情况下,我应该获取 ID、名称和状态列。问题出在哪里?如何摆脱 XML 中的类型?

如何在生成时删除 XML 中的类型

使用 Linq 怎么样?(使用 Json.Net)

var jArr = JArray.Parse(File.ReadAllText(filename));
XElement root = new XElement("root");
foreach(JObject jObj in jArr )
{
    root.Add(new XElement("item", jObj.Properties()
                                      .Select(p => new XElement(p.Name, 
                                                                p.Value.ToString()))
                                      .ToArray()));
}
var xml = root.ToString();

或使用更多 LINQ

var jArr = JArray.Parse(File.ReadAllText(filename));
XElement root = new XElement("root");
root.Add( jArr.Cast<JObject>()
              .Select(jObj => new XElement("item", jObj.Properties()
                                                       .Select(p => new XElement(p.Name, 
                                                                                 p.Value.ToString()))
                                                       .ToArray())));
var xml = root.ToString();