Какой подходящий способ для динамического преобразования XML с использованием консольного приложения ASP.NET без XSLT? - PullRequest
4 голосов
/ 20 июня 2019

Во-первых, я успешно создаю веб-API в ASP.NET. API получает XML с другого сервера. Я считаю, что подходит для XML все изменения формата.

Я пытался применить любимую логику:

 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;
             }
         }
     }
}

таким образом, только один файл преобразуется в другой файл. Я пытался создать несколько файлов одновременно, конвертировать в другой формат.

Я предоставил данные в следующем формате из веб-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 в тайле tag.its все в динамическом режиме.

Вот его формат 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 Ответ

1 голос
/ 25 июня 2019

Пожалуйста, проверьте решение ниже для вашего случая:

1) Десериализовать объект WebAPI Xml в C # (скажем, События).

2) Из (События) объекта C # в требуемый формат xml с использованием xml Linq.

Нажмите здесь - для онлайн-исполнения

Шаг 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. Десериализовать XML-строку WebAPI в объект 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");
            }

        }
}
...