C# 如何解析具有多个默认名称空间的XML?
以下是我的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
<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”,但不能使用多个名称空间。