2012-02-09 111 views
0

如何使用ling to xml根據其父元素屬性檢索特定的子元素?如何通過屬性獲取頁面上的元素

例如,如果我從xml文檔中提取以下內容,我想改變TextAlign的值。可能有幾個文本框對象,從而硬編碼的查詢是沒有用的:

<Textbox Name="pageHeaderReportTitle"> 
    <CanGrow>true</CanGrow> 
    <Height>1cm</Height> 
    <Left>45pt</Left> 
    <Style> 
     <BackgroundColor>#4F81BD</BackgroundColor> 
     <Color>White</Color> 
     <FontSize>14pt</FontSize> 
     <FontWeight>700</FontWeight> 
     <TextAlign>Left</TextAlign> 
     <VerticalAlign>Middle</VerticalAlign> 
    </Style> 
    <Top>90pt</Top> 
    <Value>=iif(len("") &gt; 0 ,iif(len("Employees") &gt; 0,"Employees - ",""),"Employees")</Value> 
    <Width>289.1614mm</Width> 
    <ZIndex>1</ZIndex> 
    </Textbox> 

這裏是我的嘗試 - >編譯器沒有按;噸compain,但它並沒有設置XML doc..When的價值調試,編譯器抱怨「對象引用不設置到對象的實例。」:

var thisIsTheNode = (from data in rep.ReportDefinitionDoc.Descendants(ns + "Textbox") 
         where data.Attribute("Name").Value == "pageHeaderReportTitle" 
         select data.Element("Width")).FirstOrDefault(); 

thisIsTheNode.SetValue("500mm"); 
+1

只是爲了澄清,只有當父母是「文本框」時纔想更新「TextAlign」? – DaveShaw 2012-02-09 11:54:56

+0

是的..我對檢索和修改該特定元素感興趣.... – user559142 2012-02-09 11:59:52

+2

不應該「文本框」是「文本框」? – DaveShaw 2012-02-09 13:16:13

回答

2

由於從XML似乎<Textbox><Width>在同一個命名空間,你就明確地指定命名空間爲<Textbox>,但不是<Width>,我認爲這是問題和y OU應該改變你的select到:

select data.Element(ns + "Width") 

而且,你不應該使用FirstOrDefault(),然後使用結果不檢查null。要麼添加該檢查,如果您預計該序列可能爲空,或使用First()

相關問題