У меня есть xml, как показано ниже. Здесь allowSessionType может иногда иметь несколько значений. Может ли кто-нибудь помочь мне прочитать оба и сохранить их в таблице данных С# gridview.

Я пытался, но получил одно значение

enter image description here

<sessionManagementSubscriptionData>
<singleNssai>1-000001</singleNssai>
<dnnConfiguration>
<pduSessionTypes>
<defaultSessionType>IPV4</defaultSessionType>
<allowedSessionType>IPV4</allowedSessionType>
</pduSessionTypes>
<sscModes>
<defaultSscMode>SSC_MODE_1</defaultSscMode>
<allowedSscMode>SSC_MODE_1</allowedSscMode>
</sscModes>
</dnnConfiguration>

<dnnConfiguration>
<pduSessionTypes>
<defaultSessionType>IPV4</defaultSessionType>
<allowedSessionType>IPV4</allowedSessionType>
<allowedSessionType>IPV6</allowedSessionType>
</pduSessionTypes>
<sscModes>
<defaultSscMode>SSC_MODE_1</defaultSscMode>
<allowedSscMode>SSC_MODE_1</allowedSscMode>
</sscModes>
</dnnConfiguration>
</sessionManagementSubscriptionData>

DataTable dt1 = новая DataTable(); dt1.Columns.Add("Разрешенный тип сеанса", typeof(string));

XmlNodeList nodeList1 = doc.SelectNodes("//sessionManagementSubscriptionData/dnnConfiguration");

foreach (XmlNode node1 in nodeList1)
{
DataRow dtrow1 = dt1.NewRow();

var SMSDDefaultSessionType = node1.SelectSingleNode("//defaultSessionType").InnerText;
dtrow1["Default Session Type"] = SMSDDefaultSessionType;

var SMSDallowedSessionType = node1.SelectSingleNode("//allowedSessionType").InnerText;
dtrow1["Allowed Session Type"] = SMSDallowedSessionType;
dt1.Rows.Add(dtrow1);
}
GridView2.DataSource = dt1;
GridView2.DataBind();
0
Dhananjaya D N 4 Фев 2022 в 10:39
Если возможно, кто-нибудь может помочь мне с моим кодом. Я имею в виду ту же библиотеку, которую я использую
 – 
Dhananjaya D N
4 Фев 2022 в 14:36

2 ответа

using System.Xml.Serialization;
XmlSerializer serializer = new XmlSerializer(typeof(SessionManagementSubscriptionData));
using (StringReader reader = new StringReader(xml))
{
   var test = (SessionManagementSubscriptionData)serializer.Deserialize(reader);
   //test.DnnConfiguration has your data
}
[XmlRoot(ElementName="pduSessionTypes")]
public class PduSessionTypes { 

    [XmlElement(ElementName="allowedSessionType")] 
    public List<string> AllowedSessionType; 
}

[XmlRoot(ElementName="sscModes")]
public class SscModes { 

    [XmlElement(ElementName="defaultSscMode")] 
    public string DefaultSscMode; 

    [XmlElement(ElementName="allowedSscMode")] 
    public string AllowedSscMode; 
}

[XmlRoot(ElementName="dnnConfiguration")]
public class DnnConfiguration { 

    [XmlElement(ElementName="pduSessionTypes")] 
    public PduSessionTypes PduSessionTypes; 

    [XmlElement(ElementName="sscModes")] 
    public SscModes SscModes; 
}

[XmlRoot(ElementName="sessionManagementSubscriptionData")]
public class SessionManagementSubscriptionData { 

    [XmlElement(ElementName="singleNssai")] 
    public DateTime SingleNssai; 

    [XmlElement(ElementName="dnnConfiguration")] 
    public List<DnnConfiguration> DnnConfiguration; 
}

Используйте этот веб-сайт для преобразования xml в c#

0
sai vineeth 4 Фев 2022 в 10:53

Вот результаты в DataTable с использованием Xml Linq

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


namespace ConsoleApplication11
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Default Session Type", typeof(string));
            dt.Columns.Add("Allowed Session Type", typeof(string));
            dt.Columns.Add("Default SSC Mode", typeof(string));
            dt.Columns.Add("Allowed SSC Mode", typeof(string));

            XDocument doc = XDocument.Load(FILENAME);

            foreach (XElement dnnConfiguration in doc.Descendants("dnnConfiguration"))
            {
                string defaultSessionType = (string)dnnConfiguration.Descendants("defaultSessionType").FirstOrDefault();
                string[] allowedSessionType = dnnConfiguration.Descendants("allowedSessionType").Select(x => (string)x).ToArray();
                string defaultSscMode = (string)dnnConfiguration.Descendants("defaultSscMode").FirstOrDefault();
                string[] allowedSscMode = dnnConfiguration.Descendants("allowedSscMode").Select(x => (string)x).ToArray();

                dt.Rows.Add(new object[] { defaultSessionType, string.Join(",", allowedSessionType), defaultSscMode, string.Join(",", allowedSscMode) });

            }

        }
  
    }
 
}
0
jdweng 4 Фев 2022 в 13:21
Привет @jdweng Спасибо за ваши усилия, чтобы помочь мне. Можете ли вы помочь мне зафиксировать значение singleNssai.
 – 
Dhananjaya D N
4 Фев 2022 в 14:28
Где вы хотите его разместить? Это происходит только один раз. Попробуйте: string singleNssai = (string)doc.Descendants("singleNssai").FirstOrDefault();
 – 
jdweng
4 Фев 2022 в 14:39
На самом деле в моем xml singleNssai будет встречаться в нескольких местах. Я просто сохранил только данные sessionManagementSubscriptionData. поэтому помогите зафиксировать его в данных подписки управления сеансом. Когда я пытаюсь использовать строку singleNssai = (string)doc.Descendants("//sessionManagementSubscriptionData/singleNssai").FirstOrDefault(), она выдает мне ошибку;
 – 
Dhananjaya D N
4 Фев 2022 в 14:48
Linq не похож на узел, использующий косую черту. Метод Descendants("singleNssai") нуждается в отправной точке, такой как doc или dnnConfiguration. Или вы можете использовать (string)Element("singleNssai"), который является единственным, и вам не нужен First(). Смотрите мой код для
 – 
jdweng
4 Фев 2022 в 15:03