2012-05-03 5 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 = ""; 
} 

하지만, 내가 가지고있는,이 CSS를 수정하지 않습니다 조상 "크로스 탭"및 "스타일"(아래 xml) :

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

어떻게하면됩니까? 감사!

+0

내가 사용하는 대신, 그것을 해요 동안'XE .Attribute ("value"). Value = "";', xe.Attribute ("value") 대신 이것을 사용할 수 있습니까? 코드가 손상되지 않으면. 전체 속성을 제거하여 xml을 작게 만듭니다. –

+0

그걸 시도했지만 Cognos 보고서가 손상되었습니다 (XML은 본질적으로 Cognos 보고서 임). 고맙습니다! 그건 그렇고, 지금 나는 그들 모두 (CSS)를 얻지 못하고있다. 조건을 만족시키는 CSS가 몇 개 있으며, 조상으로 "크로스 탭"과 "스타일"을 가지고 있지만 조상도 마찬가지다. 다른 말로하면, 조상으로 ** 단지 "크로스 탭"과 "스타일"이있는 모든 CSS를 제거하는 조건을 설정하는 방법을 찾고 있습니다. 어떤 아이디어입니까? – MariusD

+0

* where * 절에서 사용할 메소드를 작성하여 요소를 보낼 수 있습니다. 이 메소드에서 element가 "style"과 "crosstab"을 모두 가지고 있는지 확인한 다음, element.Ancestors(). (e => e.Name! = "style"|| e.Name! = "crosstab" 그런 식으로. 대소 문자를 무시할 수도 있습니다. (XElement.Name이 올바른 속성인지 기억이 안나지만 찾을 수있을 것 같습니다.) –

답변

1

내가 제대로 이해하면,이 같은 아마 뭔가 :

... 

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이 추가 :

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

그것은 의미가 있지만 작동하지 않았다 ... 나는 추가했다.() .Anycestors (rep + "crosstabNode"). 일부 괄호도 있지만 작동하지 않으면 모든 CSS가 다시 설정됩니다. ((e.Attribute ("value")! = null) &&! ((e.Ancestors ("style")) Any() && e. Ansestors ("crosstab") Any()))) – MariusD

+0

xml을 더 제공 할 수 있습니까? (편집해야하는 값과 그렇지 않은 값 모두) –

+1

@ MarusD, Mario, 네임 스페이스를 고려해야합니다. '조상 (rep + "style")'과'Ancestors (rep + "crosstab)'. –

관련 문제