asp.net - 哪种方式适合在没有 XSLT 的情况下使用 ASP.NET 控制台应用程序进行动态 XML 转换?
问题描述
首先,我在 ASP.NET 中成功创建了 Web API。API 从另一台服务器获取 XML。我发现适合 XML 所有格式更改的。
我试图应用 belove 逻辑:
using (XmlReader reader = XmlReader.Create("XML.xml"))
{
//String starttime,Endtime;
while (reader.Read())
{
// Only detect start elements.
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "EventInfo":
// Detect this element.
Console.WriteLine("Start <content> element. ");
Console.WriteLine();
break;
}
}
}
}
这样只有一个文件转换成另一个文件。我尝试一次创建多个文件转换为另一种格式。
我从 Web API 提供了以下格式数据,这是一个普通的 XML 格式使用:
<EventInfo>
<Event>
<EventId>1</EventId>
<EventName>shedule-1</EventName>
<EventText>ch1 Channel Description</EventText>
<StartTime>00:00:00</StartTime>
<Duration>00:30:00</Duration>
<Date>20.06.2019</Date>
</Event>
<EventInfo>
我在标题标签中应用逻辑,它的开始时间+持续时间是我的结束时间,我在图块标签中显示 EventName 和 Time。它都是动态的。
这里它的 ROKU 格式 XML:
<Content>
//Here i only print the HH-MM.
<item title="00:00 - 00:30 shedule-1" LIVE="true" streamformat="mov" description="ch1 Channel Description" realeasedate="20.06.2019" description-color="0xC36419"/>
<Content>
任何人都知道哪种是转换 XML 的最佳方法。谢谢你。
解决方案
请查看以下针对您的案例的解决方案:
1) 将 WebAPI Xml 反序列化为 C# 对象(例如事件)。
2) 使用 xml Linq 从(事件)C# 对象到所需的 xml 格式。
点击这里- 在线执行
第 1 步:创建一个类以对输入的 xml 结构进行脱轨。
public class Event
{
[XmlElement]
public string EventId { get; set; }
[XmlElement]
public string EventName { get; set; }
[XmlElement]
public string EventText { get; set; }
[XmlElement]
public string StartTime { get; set; }
[XmlElement]
public string Duration { get; set; }
[XmlElement]
public string Date { get; set; }
}
第 2 步:将 WebAPI Xml 字符串反序列化为 C# 对象并使用 xml linq 重新格式化。
string sXml = @"<EventInfo>
<Event>
<EventId>1</EventId>
<EventName>shedule-1</EventName>
<EventText>ch1 Channel Description</EventText>
<StartTime>00:00:00</StartTime>
<Duration>00:30:00</Duration>
<Date>20.06.2019</Date>
</Event>
</EventInfo>";
using (TextReader oReader = new StringReader(sXml))
{
// Deserialize Xml string to c# object
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Event>), new XmlRootAttribute("EventInfo"));
List<Event> lstEvents = (List<Event>)xmlSerializer.Deserialize(oReader);
if (lstEvents != null)
{
// Restructure the C# object to ROKU Xml Format using Xml Linq
XElement oResult = new XElement("Content", lstEvents.Select(t =>
new XElement("item",
new XAttribute("title", string.Format("{0} - {1} {2}", Convert.ToDateTime(t.StartTime).ToString("HH:mm"), Convert.ToDateTime(t.Duration).ToString("HH:mm"), t.EventName)),
new XAttribute("LIVE", "true"),
new XAttribute("streamformat", "mov"),
new XAttribute("description", t.EventName),
new XAttribute("realeasedate", t.Date),
new XAttribute("description-color", "0xC36419")
)));
// Saving the output as seperate xml file
oResult.Save("ROKU.xml");
}
else
{
Console.WriteLine("No Events Found");
}
}
}
推荐阅读
- javascript - 选择器中的字符串始终为空,尽管不为空 -> 无法识别的表达式/空不是对象
- google-cloud-platform - 如何使用带有 WriteChannel 和 MD5 检查的 JAVA 库上传到 Google Storage
- javascript - 通过在 ReactJs 中循环来路由路径和组件名称
- python - 对数据框中特定列的重复行求和
- c# - 异步等待可以增加执行功能的总时间吗
- c# - 用于多个 ORM 的灵活存储库架构
- javascript - 将mysql查询返回到nodejs flash消息
- javascript - 为什么新行上的 return 语句不返回任何值?
- python - 程序立即终止,忽略守护线程中的 time.sleep()
- ios - 切换启用/禁用本地通知(swift 4)