2013-06-12 55 views
1

考慮下面的XML返回爲一個的XDocument類文件「XDOC」XML命名空間的數據元素的訪問返回null

<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總是返回「空」,但如果命名空間方面是去除 如預期的那樣調用工作。

我在做什麼,這是錯誤的正確訪問這些元素,也是最好的方式來寫這些元素的新值?

感謝薩拉

回答

1

要檢索的XElement,你對他的父母給你的位置:

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

要檢索AccessString,這是一個有點複雜,我訪問到的返回所有DescendantNodes()兒童(XElement,價值等...),我篩選以檢索預期的XElement:

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

希望它的幫助。

+0

很多謝謝,是的,幫助。我將如何更改這些值,我是否可以使用相同的地址並使用.value(method)= new value? –

+0

當然,您可以使用.Value屬性來分配一個新值。 –

+0

偉大的所有工作 - 將得到所有這一天的hang手 - - 真的,真的欠你的幫助 - 飲料對我'有一天' –

相關問題