1

鉴于以下 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”和“Name”元素。

  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 XElement 始终返回为“null”,但是如果删除了命名空间方面,则调用按预期工作。

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

谢谢莎拉

4

1 回答 1

1

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

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;

希望有帮助。

于 2013-06-12T07:12:19.683 回答