【发布时间】:2016-07-31 18:25:02
【问题描述】:
如问题所述。我有一个 xml 文档(如下),我需要获取定义命名空间 urn:schemas-sony-com:av 的 X_ScalarWebApi_DeviceInfo。不幸的是,它会导致错误:{System.NullReferenceException: Object reference not set to an instance of an object。我主要对 ServiceList 元素感兴趣,但效果不佳。平台 - Windows 10 移动版。
有什么想法吗?
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<friendlyName>ILCE-6000</friendlyName>
<manufacturer>Sony Corporation</manufacturer>
<manufacturerURL>http://www.sony.net/</manufacturerURL>
<modelDescription>SonyDigitalMediaServer</modelDescription>
<modelName>SonyImagingDevice</modelName>
<UDN>uuid:000000001000-1010-8000-62F1894EE7BE</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-sony-com:service:ScalarWebAPI:1</serviceType>
<serviceId>urn:schemas-sony-com:serviceId:ScalarWebAPI</serviceId>
<SCPDURL/>
<controlURL/>
<eventSubURL/>
</service>
</serviceList>
<av:X_ScalarWebAPI_DeviceInfo xmlns:av="urn:schemas-sony-com:av">
<av:X_ScalarWebAPI_Version>1.0</av:X_ScalarWebAPI_Version>
<av:X_ScalarWebAPI_ServiceList>
<av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_ServiceType>guide</av:X_ScalarWebAPI_ServiceType>
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
<av:X_ScalarWebAPI_AccessType/>
</av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_ServiceType>accessControl</av:X_ScalarWebAPI_ServiceType>
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
<av:X_ScalarWebAPI_AccessType/>
</av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_ServiceType>camera</av:X_ScalarWebAPI_ServiceType>
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
<av:X_ScalarWebAPI_AccessType/>
</av:X_ScalarWebAPI_Service>
</av:X_ScalarWebAPI_ServiceList>
</av:X_ScalarWebAPI_DeviceInfo>
</device>
</root>
啊,代码:
XDocument xDoc = XDocument.Parse(xml_text);
//var av = xDoc.Root.GetDefaultNamespace();//.Attribute("xmlns");//
XNamespace av = "urn:schemas-sony-com:av";
System.Diagnostics.Debug.WriteLine(av);
<XElement> api_list = (List<XElement>)xDoc.Element(av + "X_ScalarWebAPI_DeviceInfo").Elements();
==编辑== 好吧,两种解决方案都可以,所以我赞成其中一个并将另一个标记为答案:P 有人提到,仅使用“本地名称”的解决方案可能会导致误报搜索结果,所以为了安全起见,我使用第一个。感谢您的帮助!
【问题讨论】:
-
产生错误的代码在哪里?
-
我忘了,广告,现在它在;)你可以看到我尝试了很多我在互联网上看到的选项
-
你的
xDoc只有一个子元素<root xmlns="urn:schemas-upnp-org:device-1-0">,所以调用.Element(av + "X_ScalarWebAPI_DeviceInfo")返回null。 -
在以后的问题中,尝试清理并格式化您的 xml。 Visual Studio 做得很好。某些行上的
-令人困惑。 -
其实这是来自 VisualStudio 的 XML 可视化器的输出,所以不,它做得不好 :P 我马上格式化它
标签: c# xml windows-10-mobile