2012-05-03 16 views
2

は、私はここで、すべての「CSS」の要素「値」に「」の値を設定しようとしているコードですよ:特定の祖先の要素を削除するにはどうすればよいですか?

XDocument doc = XDocument.Load(fi.FullName); 
XNamespace rep = "http://developer.cognos.com/schemas/report/8.0/"; 

List<XElement> cssElements = 
    (from e in doc.Root.DescendantsAndSelf(rep + "CSS") 
    where 
    (
     (e.Attribute("value") != null) 
    ) 
    select e).ToList(); 

//modify Attribute in elements 
foreach (XElement xe in cssElements) 
{ 
    xe.Attribute("value").Value = ""; 
} 

しかし、私が持っている、この1つのCSSを変更する必要はありません先祖 "クロス集計"と "スタイル"(下のXML):

<crosstab name="Crosstab1" refQuery="Query1"> 
<crosstabSuppress type="rows"/> 
<style> 
    <CSS value="border-collapse:collapse;font-family:'Times New Roman'"/> 

どうすればいいですか?ありがとう!

+0

... List<XElement> cssElements = (from e in doc.Root.DescendantsAndSelf(rep + "CSS") where ( (e.Attribute("value") != null) && !(e.Ancestors(rep + "style").Any() && e.Ancestors(rep + "crosstab").Any()) ) select e).ToList(); ... 

私は、あなたのwhere -clauseにこれを追加.Attribute( "value")。Value = ""; '、これは' xe.Attribute( "value")の代わりに使用できますか?それがあなたのコードを壊さないならば。属性全体を削除することによりxmlを小さくします。 –

+0

私はそれを試みましたが、それはCognosのレポートを破ります(xmlは基本的にCognosのレポートです)。ありがとうございました!ところで、今私はそれらをすべて取得していません(CSS)、まだ条件に一致するいくつかのCSSがあります、彼らは祖先として "クロス集計"と "スタイル"を持っていますが、彼らは他の祖先も持っています。言い換えれば、それらを排除する方法を探しています。つまり、祖先としての「クロス集計」と「スタイル」だけを持つすべてのCSSを排除する条件を設定することです。 – MariusD

+0

* where *句で使用するメソッドを作成し、要素を送信することができます。このメソッドでは、要素が "style"と "crosstab"の両方を持っているかどうかをチェックし、次に "element.Ancestors()。Any(e => e.Name!=" style "|| e.Name!=" crosstab "そんな感じ。大文字小文字を無視するかもしれません。 (XElement.Nameが正しいプロパティであるかどうか覚えていないが、それを見つけることができると思う) –

答えて

1

私が正しくあなたを理解している場合、このような多分何か:私はそれをしていますが代わりに `XEを使用しての、

&& !(e.Ancestors(rep + "style").Any() && e.Ancestors(rep + "crosstab").Any()) 
+0

それは理にかなっていますが、うまくいきませんでした...私は追加しました(訳注:いくつかの括弧もありますが、まだ動作しません。すべてのCSSがリセットされます((e.Attribute( "value")!= null)&&!((e.Ancestors( "style")。 Ansestors( "crosstab")Any()))) – MariusD

+0

さらに多くのxmlを提供できますか?(編集する必要がある両方の値) –

+1

@MariusD、Mario、名前空間を考慮する必要があります。 '先祖(rep +" style ")'と 'Ancestors(rep +" crosstab ")'。 –

関連する問題