C# 如何在不使用youtube api的情况下解析youtube xml

C# 如何在不使用youtube api的情况下解析youtube xml,c#,asp.net,facebook,asp.net-mvc-3,youtube,C#,Asp.net,Facebook,Asp.net Mvc 3,Youtube,我想让我的Facebook应用程序中的用户发布YouTube视频。 任何用户都可以在输入文本框中放置YouTube链接。这种行为与在Facebook墙上发布视频完全相同。 应用程序从链接中提取视频id并创建不同的YouTube链接。 例如,如果链接为:则id为:JBWd_yJPbr8,请求为comeshttp://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8 问题是解析返回的XML。这不是标准的XML,或者至少我还没有使用标准的XML解析器让它工作

我想让我的Facebook应用程序中的用户发布YouTube视频。 任何用户都可以在输入文本框中放置YouTube链接。这种行为与在Facebook墙上发布视频完全相同。 应用程序从链接中提取视频id并创建不同的YouTube链接。
例如,如果链接为:
则id为:
JBWd_yJPbr8
,请求为comeshttp://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8

问题是解析返回的XML。这不是标准的XML,或者至少我还没有使用标准的XML解析器让它工作。如何解析此XML?我需要一个缩略图,标题和描述

using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
{
    XmlWriterSettings ws = new XmlWriterSettings();
    ws.Indent = true;
    using (XmlWriter writer = XmlWriter.Create(output, ws))
    {




            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        writer.WriteStartElement(reader.Name);
                        break;
                    case XmlNodeType.Text:
                        writer.WriteString(reader.Value);
                        break;
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        writer.WriteProcessingInstruction(reader.Name, reader.Value);
                        break;
                    case XmlNodeType.Comment:
                        writer.WriteComment(reader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteFullEndElement();
                        break;
                }
            }

        }
    }
此情况为抛出异常:

case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
元素类型无效

是否尝试过以下操作: 这是一个很好的例子

您是否尝试过以下方法: 这是一个非常好的示例

使用,您可以将返回的json响应解析为:

(我将
?alt=json
添加到您的url)

使用,您可以将返回的json响应解析为:

(我将
?alt=json
添加到您的url)


xml没有问题——它解析得很好。问题在于您编写xml的方式

代码
writer.writeStarteElement(reader.Name)reader.Name
返回类似“app:control”的字符串时,code>不起作用-元素名称中不能有冒号

如果xml在标记名中有冒号,这是因为冒号前的位指示标记所属的命名空间

如果更换管路:

case XmlNodeType.Element:
    writer.WriteStartElement(reader.Name);
    break;

您的代码应该能够很好地运行和解析XML


但是,您会发现输出的xml不是您想要的,因此代码仍然需要一些工作。

xml没有问题,它解析得很好。问题在于您编写xml的方式

代码
writer.writeStarteElement(reader.Name)reader.Name
返回类似“app:control”的字符串时,code>不起作用-元素名称中不能有冒号

如果xml在标记名中有冒号,这是因为冒号前的位指示标记所属的命名空间

如果更换管路:

case XmlNodeType.Element:
    writer.WriteStartElement(reader.Name);
    break;

您的代码应该能够很好地运行和解析XML


您会发现输出的xml不是您想要的,因此代码仍然需要一些工作。

使用(XmlReader=XmlReader.Create(new StringReader(xmlString))…使用(XmlReader=XmlReader.Create(new StringReader(xmlString)))…@user750487-如果这回答了您的问题,请考虑将其标记为已接受的答案,请单击tick@user750487-如果这回答了你的问题,请考虑把它标记为被接受的答案,点击滴答声谢谢!但是我需要在这里使用ajax请求case@user750487AJAX什么意思?严格意义上的xml?为什么?我的错误:)JSon非常适合这种情况。我已经用过这个代码了。工作很完美。谢谢!谢谢但是我需要在这里使用ajax请求case@user750487AJAX什么意思?严格意义上的xml?为什么?我的错误:)JSon非常适合这种情况。我已经用过这个代码了。工作很完美。谢谢!
case XmlNodeType.Element:
    writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
    break;