Как читать XML-файл с C # - PullRequest
       25

Как читать XML-файл с C #

0 голосов
/ 06 апреля 2019

Я хочу прочитать XML-файл с C # (проект Unity), чтобы отобразить некоторый контент.XML-файл передается заданием TALEND в Talend Studio.

Я преобразовал XML-файл в классы C # и сейчас пытаюсь прочитать этот XML (хранящийся в файле) для управления содержимым.

На данный момент я могу прочитать некоторые свойства, но самый интересный тег - nul.Во время десериализации ошибки не возникает.

private const string filename = "/Applications/TalendStudio-7.1.1/studio/workspace/LOCAL_PROJECT/process/job1_0.1.item";
void Start()
{  
    // Create an instance of the XmlSerializer.
    XmlSerializer serializer = new XmlSerializer(typeof(Xml2CSharp.ProcessType));

    // Declare an object variable of the type to be deserialized.
    Xml2CSharp.ProcessType i;

    using (Stream reader = new FileStream(filename, FileMode.Open))
    {
        // Call the Deserialize method to restore the object's state.
        i = (Xml2CSharp.ProcessType)serializer.Deserialize(reader); 
        Debug.Log(i);         
    }
}

XML-файл начинается с:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<talendfile:ProcessType 
xmlns:talendfile="TalendFile.xsd" xmlns:TalendMapper="http://www.talend.org/mapper" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
defaultContext="Default" jobType="Standard" xmi:version="2.0">
    <context confirmationNeeded="false" name="Default">
      <contextParameter comment="" name="max_rows" prompt="max_rows?" promptNeeded="false" type="id_Integer" value="10"/>
    </context>
    <context confirmationNeeded="false" name="prod">
      <contextParameter comment="" name="max_rows" prompt="max_rows?" promptNeeded="false" type="id_Integer" value="30"/>
    </context>
    <context confirmationNeeded="false" name="qa">
      <contextParameter comment="" name="max_rows" prompt="max_rows?" promptNeeded="false" type="id_Integer" value="20"/>
    </context>
<parameters>
   <elementParameter field="TEXT" name="SCREEN_OFFSET_X" show="false" value="0"/>
   <elementParameter field="TEXT" name="SCREEN_OFFSET_Y" show="false" value="0"/>
   <elementParameter field="TEXT" name="REPOSITORY_CONNECTION_ID" show="false" value=""/>

и т. Д.

в контексте и параметрепустыСпасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 апреля 2019

Использовать сериализацию XML:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReader reader = XmlReader.Create(FILENAME);

            XmlSerializer serializer = new XmlSerializer(typeof(ProcessType));

            ProcessType processType = (ProcessType)serializer.Deserialize(reader);


        }
    }
    [XmlRoot(ElementName = "ProcessType", Namespace = "TalendFile.xsd")] 
    public class ProcessType
    {
        [XmlAttribute("defaultContext")]
        public string defaultContext { get; set; }

        [XmlAttribute("jobType")]
        public string jobType { get; set; }

        [XmlElement("context", Namespace = "")]
        public List<Context> context { get; set; }

        [XmlArray("parameters", Namespace = "")]
        [XmlArrayItem("elementParameter", Namespace = "")]
        public List<Parameters> parameters { get; set; } 

   }
   [XmlRoot("context", Namespace = "")]
   public class Context
   {
       [XmlAttribute("confirmationNeeded")]
       public string confirmationNeeded { get; set; }

       [XmlAttribute("name")]
       public string name { get; set; }

       [XmlElement("contextParameter", Namespace = "")]
       public ContextParameter contextParameter { get; set; }
   }
   [XmlRoot("contextParameter", Namespace = "")]
   public class ContextParameter
   {
       [XmlAttribute("comment")]
       public string comment { get; set; }

       [XmlAttribute("name")]
       public string name { get; set; }

       [XmlAttribute("prompt")]
       public string prompt { get; set; }

       [XmlAttribute("promptNeeded")]
       public string promptNeeded { get; set; }

       [XmlAttribute("type")]
       public string type { get; set; }

       [XmlAttribute("value")]
       public int value { get; set; }
   }
    [XmlRoot("parameters", Namespace = "")]
   public class Parameters
   {
       [XmlAttribute("field")]
       public string field { get; set; }

       [XmlAttribute("name")]
       public string name { get; set; }

       [XmlAttribute("show", Namespace = "")]
       public string show { get; set; }

       private int? _value { get; set; }
       [XmlAttribute("value")]
       public string value {
           get { return _value.ToString(); }
           set { _value = value == string.Empty ? (int?)null : int.Parse(value); }
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...