Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 如何解析具有多个默认名称空间的XML?_C#_Xml_Nsxmlparser_Xml Parsing - Fatal编程技术网

C# 如何解析具有多个默认名称空间的XML?

C# 如何解析具有多个默认名称空间的XML?,c#,xml,nsxmlparser,xml-parsing,C#,Xml,Nsxmlparser,Xml Parsing,以下是我的XML响应: <DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" <item id="1182" parentID="40" restricted="1"> <title>Hot Iss

以下是我的XML响应:

 <DIDL-Lite
xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" 
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"
<item id="1182" parentID="40" restricted="1">
<title>Hot Issue</title>
</item>
</DIDL-Lite>
这不会产生任何结果

谢谢,
subheadu

当文档中存在默认名称空间时,必须将其作为命名名称空间进行解析。比如说

XNamespace ns = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/";

var xDIDL = xResponse.Element(ns + "DIDL-Lite");

无论您如何命名ns变量都不重要。关键是在传递元素名的任何地方(确切地说是XName),都需要包含名称空间+名称。您会注意到字符串可以转换为XNamespace,但您也可以使用它的构造函数。

当文档中有默认名称空间时,您必须像解析命名名称空间一样解析它。比如说

XNamespace ns = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/";

var xDIDL = xResponse.Element(ns + "DIDL-Lite");

无论您如何命名ns变量都不重要。关键是在传递元素名的任何地方(确切地说是XName),都需要包含名称空间+名称。您会注意到字符串可以转换为XNamespace,但也可以使用它的构造函数。

您使用的是xml模式,它应该出现在您试图访问的元素的名称中。查看
XNamespace
类。

您正在使用xml模式,该模式应该出现在您试图访问的元素的名称中。查看
XNamespace
课程。

谢谢爱因斯坦先生。在我的文档中有多个名称空间,所以在这种情况下我必须写:XNamespace ns=“urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/”;xns1=“”;XNamespace ns2=“urn:schemas-upnp-org:metadata-1-0/upnp/”;var xDIDL=xResponse.Element(ns+ns1+ns2+“DIDL-Lite”);不,在XML文档中,任何没有前缀的元素都位于“默认”命名空间中(即,表示xmlns=“…”的元素,而不是xmlns:prefix=“…”),因此您只需要执行ns+“ElementName”。但是,如果您在另一个名称空间中引用某个元素,则必须执行ns1+“ElementName”或ns2+“ElementName”,但对于特定的元素名称,不能使用多个名称空间。谢谢爱因斯坦先生。在我的文档中有多个名称空间,所以在这种情况下我必须写:XNamespace ns=“urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/”;xns1=“”;XNamespace ns2=“urn:schemas-upnp-org:metadata-1-0/upnp/”;var xDIDL=xResponse.Element(ns+ns1+ns2+“DIDL-Lite”);不,在XML文档中,任何没有前缀的元素都位于“默认”命名空间中(即,表示xmlns=“…”的元素,而不是xmlns:prefix=“…”),因此您只需要执行ns+“ElementName”。但是,如果要引用另一个名称空间中的元素,则必须对特定元素名称执行ns1+“ElementName”或ns2+“ElementName”,但不能使用多个名称空间。