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'返回,但是如果删除了名称空间方面呼叫工作正常

我做了什么是错误的正确访问这些元素,也什么是最好的方式来写新值到这些元素?

谢谢莎拉

XML名称空间数据元素访问返回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;

希望对你有帮助。