首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#解析XML (.xspf文件)

C#解析XML (.xspf文件)
EN

Stack Overflow用户
提问于 2016-01-10 19:56:09
回答 2查看 472关注 0票数 0

我有一个播放列表,我需要解析,我需要做一些事情,比如在列表框中设置它们,下面是.xspf

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">
    <title>Playlist</title>
    <trackList>
        <track>
            <location>file:///E:/Downloads/video1.mp4</location>
            <duration>681493</duration>
            <extension application="http://www.videolan.org/vlc/playlist/0">
                <vlc:id>0</vlc:id>
            </extension>
        </track>
        <track>
            <location>file:///E:/Downloads/video2.mp4</location>
            <duration>614585</duration>
            <extension application="http://www.videolan.org/vlc/playlist/0">
                <vlc:id>1</vlc:id>
            </extension>
        </track>
        <track>
            <location>file:///E:/Downloads/video3.mp4</location>
            <duration>220629</duration>
            <extension application="http://www.videolan.org/vlc/playlist/0">
                <vlc:id>2</vlc:id>
            </extension>
        </track>        
    </trackList>
    <extension application="http://www.videolan.org/vlc/playlist/0">
        <vlc:node title="oh.xspf">
        <vlc:node title="B">
            <vlc:item tid="0"/>
            <vlc:item tid="1"/>         
        </vlc:node>
        <vlc:node title="Solo">
            <vlc:item tid="2"/>         
        </vlc:node>
    </extension>
</playlist>

下面是可以工作的C#代码,但我遇到了问题,因为我使用了"node.ChildNode.Item(1).InnerText“--一些文件有更多的元数据,而不仅仅是”位置“”工期“。但我似乎无法使用元素名来获取我想要的信息。

代码语言:javascript
复制
 private void button1_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("1.xspf");
            XmlNodeList nodeList = xmlDoc.GetElementsByTagName("track");
            string proID = "", proName = "";
            foreach (XmlNode node in nodeList)
            {
                    proID = node.ChildNodes.Item(1).InnerText;//ChildNodes.Item(1).InnerText;
                    //proName = node.SelectSingleNode("duration").InnerText;
                    listBox1.Items.Add(proID);


            }       
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-10 23:34:19

使用xml,如下所示。使用System.Xml.Linq;添加到模块顶部

代码语言:javascript
复制
        const string FILENAME = @"c:\temp\test.xml";
        XDocument doc = XDocument.Load(FILENAME);
        XNamespace ns = ((XElement)doc.FirstNode).Name.Namespace;
        var data = doc.Descendants(ns + "track").Select(x => new object[] {
            (string)x.Element(ns + "location"),
            (int)x.Element(ns + "duration"),
            int.Parse(x.Element(ns + "extension").Value),
            (string)x.Element(ns + "extension").Attribute("application")
        }).ToList();

        foreach (object prodID in data)
        {
            listBox1.Items.Add(prodID);
        }  
票数 0
EN

Stack Overflow用户

发布于 2016-01-11 16:43:54

这样做是可行的:

代码语言:javascript
复制
 class PlaylistItem
        {
            public string location { get; set; }
            public string extensions { get; set; }
            public string duration { get; set; }
        }

    private void button2_Click(object sender, EventArgs e)
        {
            
            XDocument xdoc = XDocument.Load(@"1.xspf");
            XNamespace ns = ((XElement)xdoc.FirstNode).Name.Namespace;

            List<PlaylistItem> fileSignatures = (from file in xdoc.Descendants(ns+ "track")
                                                  select new PlaylistItem
                                                  {
                                                      location = (string)file.Element(ns + "location").Value,
                                                      extensions = (string)file.Element(ns + "extension").Value,
                                                      duration = (string)file.Element(ns + "duration")
                                                  }).ToList();


            foreach (var item in fileSignatures)
            {
                if (item.duration != null)
                {
                    listBox1.Items.Add("Duration: " + item.duration + "  id: " + item.extensions);
                    listBox1.Items.Add("File: " + item.location);
                }
                else
                {
                    
                }
            }


        }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34710119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档