Как десериализовать только часть XML-файла - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть xml:

     <query xmlns='http://jabber.org/protocol/disco#info'>
        <identity category='store'
              type='file'
              name='HTTP File Upload' />
        <feature var='urn:xmpp:http:upload:0' />
        <x type='result' xmlns='jabber:x:data'>
            <field var='FORM_TYPE' type='hidden'>
                <value>urn:xmpp:http:upload:0</value>
            </field>
            <field var='max-file-size'>
                <value>5242880</value>
            </field>
        </x>
      </query>

Мне нужно получать данные только из тегов <value>.В результате я хотел бы получить List<string>.Как это сделать с помощью System.Xml.Serialization?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Спасибо Удалено за ваш ответ, но я уточнил, что мне нужны данные от <field> и <value>

     <field var='FORM_TYPE' type='hidden'>
         <value>urn:xmpp:http:upload:0</value>

К счастью, я понял это сам:

    [XmlType("field")]
    public class Field
    {

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


        [XmlElement("value")]
        public string Value { get; set; }

    }
    [XmlType("query")]
    public class DiscoFileInfo
    {
        [XmlArray("x",Namespace = "jabber:x:data")]
        [XmlArrayItem("field", typeof(Field))]
        public List<Field> Fields { get; set; }

    }
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(DiscoFileInfo), "http://jabber.org/protocol/disco#info");
0 голосов
/ 24 сентября 2019

Пожалуйста, сделайте свое собственное тщательное исследование, прежде чем отправлять вопрос.Вот несколько методов, у вашего XML тоже есть пространства имен (Xmlns), поэтому вы должны учесть это, перейдите к исходному кредиту для большего количества примеров.

- Method XML Namespace (you will most likely need this method) https://techoctave.com/c7/posts/113-c-reading-xml-with-namespace

- Method XMLnode
`
XmlDocument doc = new XmlDocument();    
doc.Load(Path);
XmlNodeList elemList = doc.GetElementsByTagName(...);
for (int i = 0; i < elemList.Count; i++)
{
    string attrVal = elemList[i].Attributes["SuperString"].Value;
}

`

- Method Serialization

`

using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var title = new Title() { Id = 3, Value = "something" };
            var serializer = new XmlSerializer(typeof(Title));
            var stream = new MemoryStream();
            serializer.Serialize(stream, title);
            stream.Flush();
            Console.Write(new string(Encoding.UTF8.GetChars(stream.GetBuffer())));
            Console.ReadLine();
        }
    }

    public class Title
    {
        [XmlAttribute("id")]
        public int Id { get; set; }
        [XmlText]
        public string Value { get; set; }
    }

}
`

Исходный кредит: Сериализация класса C # в XML с атрибутами и одним значением для класса with-attribute-and-a-одно значение для класса

Чтение атрибута XML с использованием XmlDocument xmldocument

...