C#/ XML - 问题

Amy*_*yce 0 c# xml xpath

我有一个问题,我一直试图解决几乎一个星期,但似乎不幸的是,我不能自己管理它.也许有人可以帮助我.

我有这种类型的源XML:

<data> 
<para1>24499</para1> 
<para2>32080148</para2> 
<para4>20e500cc6008d0f8ab1fd108b220ca261f85edd9</para4> 
<para6></para6> 
<timetype>4</timetype> 
<fkcontent>964342</fkcontent> 
<season>0</season> 
<fmstoken><![CDATA[7bca3c544ad64e526806fb5a6b845148]]></fmstoken> 
<fmstoken_user>32010484</fmstoken_user> 
<fmstoken_time>1283165972</fmstoken_time> 
<fmstoken_renew><![CDATA[http://www.sky.com/logic/fmstoken.php?method=refresh]]></fmstoken_renew> 
<adserverXML><![CDATA[http://www.sky.de/dummy.xml]]></adserverXML> 
    <playlist> 
<videoinfo quality="0" name="DSL 1000"> 
    <id>24499</id> 
    <noad>1</noad> 
    <productplacement>0</productplacement> 
    <filename>http://www.sky.com/video/1/V_53511_BB00_E81016_46324_16x9-lq-512x288-vp6-c0_bbb491b3ce64ef667340a21e2bfb3594.f4v</filename> 
    <title><![CDATA[Who will be the winner?]]></title> 

    </videoinfo> 
<videoinfo quality="1" name="DSL 2000"> 
    <id>24499</id> 
    <noad>1</noad> 
    <productplacement>0</productplacement> 
    <filename>http://www.sky.de/video/1/V_53513_BB00_E81016_46324_16x9-hq-512x288-vp6-c0_fa948bc5429cf28455779666cc59cf5e.f4v</filename> 
    <title><![CDATA[Who will be the winner?]]></title> 

    </videoinfo> 
    </playlist> 
</data>
Run Code Online (Sandbox Code Playgroud)

这里是代码的一部分,让我从上面的xml页面获取所需的标记内容:

        private static string getTagContent(string source, string tag)
    {
        string fullTagBegin = "<" + tag + ">";
        string fullTagEnd = "</" + tag + ">";

        int indexBegin = source.IndexOf(fullTagBegin) + fullTagBegin.Length;
        int indexEnd = source.IndexOf(fullTagEnd);
        int indexLength = indexEnd - indexBegin;

        if (indexBegin == -1 || indexEnd == -1)
            return "UNKNOWN";
        return source.Substring(indexBegin, indexLength);
    }



    public static void Start(String url)
    {
        try
        {
            String urlXML = url;
            WebClient wClient = new WebClient();

            string sourceXML = wClient.DownloadString(urlXML);
            sourceXML = sourceXML.Replace("]]>", "");
            sourceXML = sourceXML.Replace("<![CDATA[", "");


            String para1 = getTagContent(sourceXML, "para1");
            String para2 = getTagContent(sourceXML, "para2");
            String para4 = getTagContent(sourceXML, "para4");
            String timetype = getTagContent(sourceXML, "timetype");
            String fkcontent = getTagContent(sourceXML, "fkcontent");
            String season = getTagContent(sourceXML, "season");
            String fmstoken = getTagContent(sourceXML, "fmstoken");
            String fmstoken_user = getTagContent(sourceXML, "fmstoken_user");
            String fmstoken_time = getTagContent(sourceXML, "fmstoken_time");
            String fmstoken_renew = getTagContent(sourceXML, "fmstoken_renew");
            String filename = getTagContent(sourceXML, "filename").Replace("http://", "");
            String title = System.Text.RegularExpressions.Regex.Replace(getTagContent(sourceXML, "title"), @"[^a-zA-Z0-9]","_");
Run Code Online (Sandbox Code Playgroud)

问题是:

一切正常,除了一个事实,即有两个"文件名",并在源XML"称号"的标签,但我需要选择只有第二者,那些在这一项目下:

<videoinfo quality="1" name="DSL 2000">,

并以某种方式跳过/忽略第一个,那些在前一行之上且在此行之下的那些:

<videoinfo quality="0" name="DSL 1000">

我无法弄清楚如何做到这一点.

(我唯一的猜测是,也许它是与XPathNavigator的,但我不知道这是一个正确的猜测,反正,我真的不知道如何正确使用它).


编辑:问题解决了.我要感谢所有回复你的建议的人.非常感谢!

Jes*_*sen 6

这实际上不是在.Net中使用XML的正确方法.

您没有提到您正在开发的.Net版本.根据版本的使用XmlDocument,XDocument/LINQ to XML.

LINQ to XML上的MSDN

XmlDocument上的MSDN

  • 绝对同意.不能夸大你通过这种方式为自己创造多少工作. (3认同)