簡體   English   中英

如何使用 C# 顯示 XML 數據

[英]How can I display XML data using C#

我正在嘗試顯示名為 id 的通道元素的 id 屬性、顯示名稱標簽的內部文本以及有時包含在通道元素內的圖標的內部文本。

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="xmltv.co.uk" source-info-name="xmltv.co.uk">
  <channel id="0052a71acac348ff93f5680aa9c125eb">
    <display-name>2910</display-name>
  </channel>
  <channel id="00da025711e82cf319cb488d5988c099">
    <display-name>Sony Movies</display-name>
  </channel>
  <channel id="00dfea977320f17bb419abaa1f079f39">
    <display-name>Good Food</display-name>
    <icon src="/images/channels/00dfea977320f17bb419abaa1f079f39.png"/>
  </channel>
<channel id="018202232e044b504f9dc5263617d496">
    <display-name>The Box</display-name>
    <icon src="/images/channels/018202232e044b504f9dc5263617d496.png"/>
  </channel>

我嘗試在下面使用此代碼 C# 代碼但是第二個如果給我一個關於未引用 object 的錯誤。

 XmlDocument doc = new XmlDocument();

        doc.Load(xmlLocation);



        //dispaly the  nodes
        foreach (XmlNode node in doc.DocumentElement.ChildNodes) 
        {

            //get the channel
            if (node.Name.Equals("channel"))
            {

                Debug.WriteLine("Channel Name : " + node.ChildNodes[0].Name.ToString()); //or loop through its children as well
                //Debug.WriteLine("Channel Name : " + node.AttributeCount.ToString()); //or loop through its children as well

//get the icon element
                  if(node.ChildNodes[1].Name != null)
                    Debug.WriteLine("Channel Name : " + node.ChildNodes[1].Name.ToString());


            }

        }

雖然 XDocument/XElement 和 LinQ 到 XML 是新趨勢,

遵循您的實施,並僅添加一項功能(使用 XPATH 查詢文檔內容);

請找到獲取頻道名稱及其各自圖標源 URL 的代碼(如果存在)

通過應用 SelectNodes 和 SelectSingleNode,API 正在為我們迭代節點。

// Select all the XML elements whose name is "channel"
foreach (XmlNode channelNode in doc.DocumentElement.SelectNodes("channel"))
{
    // check if a child element with the name "display-name" exists
    XmlNode displayNameNode = channelNode.SelectSingleNode("display-name");
    if (displayNameNode != null)
    {
        // If yes, print the inner text
        Debug.WriteLine("Channel Name : " + displayNameNode.InnerText);
    }

    // then check if the icon node exists
    XmlNode iconNode = channelNode.SelectSingleNode("icon");

    if (iconNode != null)
    {
        // and check if it has an attribute with the name "src"
        if (iconNode.Attributes["src"] != null)
        {
            // and if yes, print out its value
            Debug.WriteLine("    Icon Src : " + iconNode.Attributes["src"].Value);
        }
    }
}

首先,您需要將字符串轉換為 XML 並將它們加載到 XmlDocument 中,然后使用 XPath ,如下所示。 您可以在dotnetfiddle.net中運行這個簡單的程序來檢查它。

using System;
using System.Xml;

public class Program
{
    public static void Main()
    {
        string xmlString = "<tv generator-info-name='xmltv.co.uk' source-info-name='xmltv.co.uk'>   <channel id='0052a71acac348ff93f5680aa9c125eb'> <display-name>2910</display-name>   </channel>   <channel id='00da025711e82cf319cb488d5988c099'>     <display-name>Sony Movies</display-name>   </channel>   <channel id='00dfea977320f17bb419abaa1f079f39'>     <display-name>Good Food</display-name>     <icon src='/images/channels/00dfea977320f17bb419abaa1f079f39.png'/>   </channel> <channel id='018202232e044b504f9dc5263617d496'>     <display-name>The Box</display-name>     <icon src='/images/channels/018202232e044b504f9dc5263617d496.png'/>   </channel></tv>";
        XmlDocument xmltest = new XmlDocument();
        xmltest.LoadXml(xmlString);
        XmlNodeList itemNodes = xmltest.SelectNodes("//tv/channel");
        foreach(XmlNode itemNode in itemNodes)
        {
                if (itemNode!= null) {
            Console.WriteLine(string.Format("Id:{0}", (itemNode as XmlElement).GetAttribute("id")));
            }
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM