Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C#XmlDocument(Unity3d)解析Amazon s3存储桶列表_C#_Amazon Web Services_Amazon S3_Xmldocument - Fatal编程技术网

用C#XmlDocument(Unity3d)解析Amazon s3存储桶列表

用C#XmlDocument(Unity3d)解析Amazon s3存储桶列表,c#,amazon-web-services,amazon-s3,xmldocument,C#,Amazon Web Services,Amazon S3,Xmldocument,免责声明:此问题发生在Unity应用程序中,但恕我直言,这更像是C#问题而不是Unity问题 我正在尝试使用来解析。我正在使用我在中找到的一个例子 这对于特定的XML文件很好,但是当我将我的东西放在其中时: XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("https://s3.amazonaws.com/themall/"); Debug.Log ( xmlDoc.InnerXml ); XmlNode nameNode = xmlDoc

免责声明:此问题发生在Unity应用程序中,但恕我直言,这更像是C#问题而不是Unity问题

我正在尝试使用来解析。我正在使用我在中找到的一个例子

这对于特定的XML文件很好,但是当我将我的东西放在其中时:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("https://s3.amazonaws.com/themall/");
Debug.Log ( xmlDoc.InnerXml );
XmlNode nameNode = xmlDoc.SelectSingleNode("//Name");
if(nameNode != null)
    Debug.Log(nameNode.InnerText); 
我在控制台中获得原始XML,因此我知道它正在成功下载,但即使是最简单的XPath也不会产生任何结果

我唯一的理论是,它可能与XML中的默认名称空间有关?我需要以某种方式告诉XmlDocument吗?这是我的根标签:

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
我做错了什么


谢谢

将名称空间添加到名称空间管理器时,需要为其指定一个非空前缀。根据:

如果XmlNamespaceManager将用于解析XML路径语言(XPath)表达式中的名称空间,则必须指定前缀。 大宗报价

然后必须在XPath select语句中使用前缀。以下是我使用的代码,输出如预期的那样为“themall”:

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("http://s3.amazonaws.com/themall/");

        XmlNamespaceManager namespaceManager =
            new XmlNamespaceManager(xmlDoc.NameTable);
        namespaceManager.AddNamespace("ns",
            "http://s3.amazonaws.com/doc/2006-03-01/");

        XmlNode titleNode =
            xmlDoc.SelectSingleNode("//ns:Name", namespaceManager);
        if (titleNode != null)
            Console.WriteLine(titleNode.InnerText);

将名称空间添加到名称空间管理器时,需要为其指定一个非空前缀。根据:

如果XmlNamespaceManager将用于解析XML路径语言(XPath)表达式中的名称空间,则必须指定前缀。 大宗报价

然后必须在XPath select语句中使用前缀。以下是我使用的代码,输出如预期的那样为“themall”:

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("http://s3.amazonaws.com/themall/");

        XmlNamespaceManager namespaceManager =
            new XmlNamespaceManager(xmlDoc.NameTable);
        namespaceManager.AddNamespace("ns",
            "http://s3.amazonaws.com/doc/2006-03-01/");

        XmlNode titleNode =
            xmlDoc.SelectSingleNode("//ns:Name", namespaceManager);
        if (titleNode != null)
            Console.WriteLine(titleNode.InnerText);

好极了非常感谢!出于好奇,为什么不为CNN RSS提要添加名称空间呢?如果仔细查看CNN提要,它定义了两个名称空间,但它们都是前缀,并且没有定义默认名称空间。正在选择的XPath只使用默认名称空间,而不使用任何前缀名称空间。如果没有定义的默认名称空间,则在选择XPath.NET时不需要名称空间。非常感谢!出于好奇,为什么不为CNN RSS提要添加名称空间呢?如果仔细查看CNN提要,它定义了两个名称空间,但它们都是前缀,并且没有定义默认名称空间。正在选择的XPath只使用默认名称空间,而不使用任何前缀名称空间。如果没有定义的默认名称空间,则在选择XPath时不需要名称空间。
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("http://s3.amazonaws.com/themall/");

        XmlNamespaceManager namespaceManager =
            new XmlNamespaceManager(xmlDoc.NameTable);
        namespaceManager.AddNamespace("ns",
            "http://s3.amazonaws.com/doc/2006-03-01/");

        XmlNode titleNode =
            xmlDoc.SelectSingleNode("//ns:Name", namespaceManager);
        if (titleNode != null)
            Console.WriteLine(titleNode.InnerText);