XML命名空间数据元素访问返回null

时间:2013-06-12 06:23:02

标签: c# xml namespaces

鉴于以下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>

以下代码用于恢复&#39; AccessString&#39;和 &#39;名称&#39;元素。

  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总是返回为&#39; null&#39;但是如果删除了名称空间方面 呼叫按预期工作。

我正在做的是正确访问这些元素是错误的,将新值写入这些元素的最佳方法是什么?

谢谢莎拉

1 个答案:

答案 0 :(得分:1)

要检索XElement,您必须将您定位在他的父母身上:

XElement pfn = xdoc.Root.Element(ns + "Name");

要检索AccessString,它有点复杂,我访问DescendantNodes(),它返回所有子节点(XElement,Value等等),并且我过滤以检索预期的XElement:

XElement apn = xdoc.DescendantNodes()
    .Where(x => x.GetType() == typeof(XElement) && (x as XElement).Name == ns + "AccessString")
    .First() as XElement;

希望它有所帮助。