Выберите определенный узел (с двоеточием) из XML-файла и привяжите его в классе модели. - PullRequest
0 голосов
/ 12 мая 2019

// Мне нужно прочитать тег файла XML, в котором есть двоеточие, и связать его с моделью // class

// Мой файл XML

                 <?xml version="1.0" encoding="utf-8"?>
                 <feed xml:base="" xmlns="" xmlns:d="" xmlns:m="">
                 <id>my url</id>
             <title type="text">ItemList</title>
             <updated>2019-05-07T14:18:08Z</updated>
             <link rel="self" title="ItemList" href="ItemList" />
                 <entry m:etag="">
         <id></id>
         <category term="NAV.ItemList" scheme="" />
         <link rel="edit" title="ItemList" href="" />
         <title />
         <updated>2019-05-07T14:18:08Z</updated>
         <author>
             <name />
         </author>
         <content type="application/xml">
         <m:properties>
                 <d:No>LSU-458</d:No>
             <d:Description>speaker</d:Description>
         <d:Type>Inventory</d:Type>
                 </m:properties>
         </content>
             </entry>
                 </feed>

// Мой c #code

         List<CustomerModel> customers = new List<CustomerModel>();
         doc.Load(Server.MapPath("~/oWtMRUR8_.xml"));
         foreach (XmlNode node in 
         doc.SelectNodes("/feed/id/title/updated/link/mproperties"))
         {
            customers.Add(new CustomerModel
            {
                No = int.Parse(node["d:No"].InnerText),
                Description = node["d:Description"].InnerText,
                Type = node["d:Type"].InnerText
            });
         }
         return View(customers);

// Мне нужно связать только d: no, d: description, d: type в моем классе модели // используя цикл foreach, эти теги с двоеточием, поэтому я не могуextract // содержимое тега и пространства имен было упомянуто как опция (но не сработало).Я новичок в этом и не могу найти правильный метод, надеюсь, // кто-нибудь поможет, заранее спасибо.

Мой ожидаемый результат:

                No =LSU-458 ,
                Description = speaker,
                Type  = Inventory

Ответы [ 2 ]

0 голосов
/ 13 мая 2019
 //Hi all I got the answer and I am posting it,hope it might help someone in future




                             XmlNamespaceManager namespaces = new 
                             XmlNamespaceManager(doc.NameTable);
                             namespaces.AddNamespace("m", "our_url_link");
                 XmlNodeList nodemsg = doc.SelectNodes("//m:properties", namespaces);
                            foreach (XmlNode xnz in nodemsg)
                            {
                            customers.Add(new CustomerModel
                            {
                            //item.Element("d:No").Value
                             No = xnz["d:No"].InnerText,
                             Description = xnz["d:Description"].InnerText,
                             Type = xnz["d:Type"].InnerText
                            });
                           }
0 голосов
/ 12 мая 2019

Во-первых, XML недопустим, объявлениям пространства имен нужно имя, например

<feed xml:base="""" xmlns="""" xmlns:d=""d"" xmlns:m=""m"">

Затем вы можете просмотреть properties следующим образом:

var root = doc.SelectSingleNode("/feed/entry/content");
foreach (XmlNode node in root.ChildNodes)
{
    customers.Add(new CustomerModel
    {
        No = node["d:No"].InnerText,
        Description = node["d:Description"].InnerText,
        Type = node["d:Type"].InnerText
    });
}

И, наконец, вы не можете int.Parse() d:No, потому что это строка.

...