XML名称空间数据元素访问返回null
本文关键字:访问 返回 null 元素 数据 空间 XML | 更新日期: 2023-09-27 18:17:54
给定以下XML作为Xdocument类文档'xdoc'返回
<MBNProfile xmlns=""http://www.microsoft.com/networking/WWAN/profile/v1"">
<Name>Generic</Name>
<IsDefault>true</IsDefault>
<ProfileCreationType>UserProvisioned</ProfileCreationType>
<SubscriberID>23xxxxxxxxxx426</SubscriberID>
<SimIccID>894xxxxxxxxxxxxxx66</SimIccID>
<HomeProviderName>EE</HomeProviderName>
<AutoConnectOnInternet>true</AutoConnectOnInternet>
<ConnectionMode>auto-home</ConnectionMode>
<Context>
<AccessString>general.t-mobile.uk</AccessString>
<Compression>DISABLE</Compression>
<AuthProtocol>NONE</AuthProtocol>
</Context>
</MBNProfile>
下面的代码用于恢复'AccessString'和"名字"元素。
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(profArr[0].GetProfileXmlData()); // Gets profile as above
xdoc.Add(new XComment("Modified by System")); // works
var ns = xdoc.Root.Name.Namespace; // has correct namespace
XElement pfn = xdoc.Element(ns + "Name"); // always null ?
XElement apn = xdoc.Element(ns + "AccessString"); // always null ?
pfn和apn XElements总是作为'null'返回,但是如果删除了名称空间方面呼叫工作正常
我做了什么是错误的正确访问这些元素,也什么是最好的方式来写新值到这些元素?
谢谢莎拉
要检索XElement,您必须将自己定位在其父元素上:
XElement pfn = xdoc.Root.Element(ns + "Name");
要检索AccessString,这有点复杂,我访问返回所有子元素(XElement, Value等…)的DescendantNodes(),然后过滤以检索期望的XElement:
XElement apn = xdoc.DescendantNodes()
.Where(x => x.GetType() == typeof(XElement) && (x as XElement).Name == ns + "AccessString")
.First() as XElement;
希望对你有帮助。