は、私はここで、すべての「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'"/>
どうすればいいですか?ありがとう!
:
私は、あなたの
where
-clauseにこれを追加.Attribute( "value")。Value = ""; '、これは' xe.Attribute( "value")の代わりに使用できますか?それがあなたのコードを壊さないならば。属性全体を削除することによりxmlを小さくします。 –私はそれを試みましたが、それはCognosのレポートを破ります(xmlは基本的にCognosのレポートです)。ありがとうございました!ところで、今私はそれらをすべて取得していません(CSS)、まだ条件に一致するいくつかのCSSがあります、彼らは祖先として "クロス集計"と "スタイル"を持っていますが、彼らは他の祖先も持っています。言い換えれば、それらを排除する方法を探しています。つまり、祖先としての「クロス集計」と「スタイル」だけを持つすべてのCSSを排除する条件を設定することです。 – MariusD
* where *句で使用するメソッドを作成し、要素を送信することができます。このメソッドでは、要素が "style"と "crosstab"の両方を持っているかどうかをチェックし、次に "element.Ancestors()。Any(e => e.Name!=" style "|| e.Name!=" crosstab "そんな感じ。大文字小文字を無視するかもしれません。 (XElement.Nameが正しいプロパティであるかどうか覚えていないが、それを見つけることができると思う) –