Прочитать XML Атрибут из URL - PullRequest
0 голосов
/ 20 июня 2020

Ребята, он может читать все элементы, но не может читать атрибуты. Это ссылка: https://www.korayspor.com/grisport.xml

Мне нужно прочитать атрибуты категорий. Это "Категория" по-тюркски sh. Как "Категория no =" 8988 ">

Этот код не работает:

case XmlNodeType.Attribute: 
   xmlSet.WriteAttributeString(reader.Name, reader.Value);
   break;

Весь код:

XmlTextReader reader = new XmlTextReader("https://www.korayspor.com/grisport.xml");
        XmlTextWriter xmlSet = new XmlTextWriter("sdfsdf", UTF8Encoding.UTF8);
        xmlSet.WriteStartDocument();
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    xmlSet.WriteStartElement(reader.Name);
                    break;

                case XmlNodeType.Text: 
                    xmlSet.WriteValue(reader.Value);
                    break;

                case XmlNodeType.CDATA: 
                    xmlSet.WriteCData(reader.Value);
                    break;

                case XmlNodeType.EndElement: 
                    xmlSet.WriteEndElement();
                    break;

                **case XmlNodeType.Attribute: 
                    xmlSet.WriteAttributeString(reader.Name, reader.Value);
                    break;**

            }
        }
        xmlSet.WriteEndDocument();
        xmlSet.Close();

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Используйте xml linq:

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


namespace ConsoleApplication1
{
    class Program
    {
        const string URL = "https://www.korayspor.com/grisport.xml";
        static void Main(string[] args)
        {

            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.DefaultConnectionLimit = 9999;
            XDocument doc = XDocument.Load(URL);
            XNamespace ns = doc.Root.GetDefaultNamespace();
            XElement urun = doc.Descendants(ns + "urun").Where(x => (string)x.Element(ns + "Kategori").Attribute("no") == "8988").FirstOrDefault();
            string text = (string)urun.Element(ns + "Kategori");

        }
    }
}
1 голос
/ 20 июня 2020

Я получил доступ к вашему XML и использовал Visual Studio для создания классов, используя команду «Вставить XML как классы в меню« Правка »->« Специальная вставка ».

Остальная часть кода добавлена ​​внутри класса XmlStuff чтобы увлажнить объект для вас:

namespace SEQuestion
{
    public class XmlStuff
    {
        public Urunler GetXml()
        {
            var uri = $"https://www.korayspor.com/grisport.xml";
            var serializer =
                new XmlSerializer(typeof(Urunler));

            using var reader = XmlReader.Create(uri);
            var newExport = (Urunler)serializer.Deserialize(reader);

            return newExport;
        }
    }

    [XmlRoot(ElementName = "Kategori")]
    public class Kategori
    {
        [XmlAttribute(AttributeName = "no")] public string No { get; set; }
        [XmlText] public string Text { get; set; }
    }

    [XmlRoot(ElementName = "Stok")]
    public class Stok
    {
        [XmlElement(ElementName = "label")] public string Label { get; set; }
        [XmlElement(ElementName = "Barkod")] public string Barkod { get; set; }
        [XmlElement(ElementName = "Ozellik")] public string Ozellik { get; set; }
    }

    [XmlRoot(ElementName = "Stoklar")]
    public class Stoklar
    {
        [XmlElement(ElementName = "Stok")] public List<Stok> Stok { get; set; }
    }

    [XmlRoot(ElementName = "urun")]
    public class Urun
    {
        [XmlElement(ElementName = "UrunID")] public string UrunID { get; set; }
        [XmlElement(ElementName = "UrunAdi")] public string UrunAdi { get; set; }
        [XmlElement(ElementName = "Kod")] public string Kod { get; set; }
        [XmlElement(ElementName = "Fiyat")] public string Fiyat { get; set; }

        [XmlElement(ElementName = "ListFiyat")]
        public string ListFiyat { get; set; }

        [XmlElement(ElementName = "KdvOran")] public string KdvOran { get; set; }
        [XmlElement(ElementName = "Marka")] public string Marka { get; set; }
        [XmlElement(ElementName = "Aciklama")] public string Aciklama { get; set; }

        [XmlElement(ElementName = "ImageName")]
        public string ImageName { get; set; }

        [XmlElement(ElementName = "Kategori")] public Kategori Kategori { get; set; }
        [XmlElement(ElementName = "Renk")] public string Renk { get; set; }
        [XmlElement(ElementName = "Stoklar")] public Stoklar Stoklar { get; set; }
    }

    [XmlRoot(ElementName = "Urunler")]
    public class Urunler
    {
        [XmlElement(ElementName = "urun")] public List<Urun> Urun { get; set; }

        [XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
        public string Xsd { get; set; }

        [XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
        public string Xsi { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...