2012-05-21 3 views
-1

C#을 사용하여 XML 문서 작업을하고 있습니다.C에서 데이터 손실없이 xml의 특정 태그를 제거하는 방법 #

<data> 
    <single> 
     <p xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     </p> 
     <p xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>dmcdnsbcdbn</strong> 
     </p> 
    </single> 
    <single> 
     <div xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     </div> 
     <span xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>dmcdnsbcdbn</strong> 
     </span> 
    </single> 
</data> 

나는 모든 <p>, <div><span> 태그를 제거합니다.

출력이 필요 :

<data> 
    <single> 
     <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     <strong>dmcdnsbcdbn</strong> 
    </single> 
    <single> 
     <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     <strong>dmcdnsbcdbn</strong> 
    </single> 
</data> 

이 하나가 C#을 사용하여 수행하는 방법을 제안 할 수 있습니다. XmlDocument를 사용하여.

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(xml); 

doc.DocumentNode 
    .Descendants("strong") 
    .ToList().ForEach(n => n.ParentNode.ParentNode.RemoveChild(n.ParentNode, true)); 

var newXml = doc.DocumentNode.InnerHtml; 
+2

시도한 내용은 무엇입니까? SO는 코드 생성기가 아닙니다.이 작업을해야합니다. –

+2

XSLT를 사용하는 것이 좋습니다. –

+0

또한 정규 표현식을 사용해 볼 수도 있습니다. 하지만 중첩 된 div에서는 어려울 것입니다. – BlueM

답변

1

, 그것은 수행 할 수 있습니다.

string tmp = xmlDoc.DocumentElement.InnerXml; 

tmp = Regex.Replace(tmp, "<p.*>|</p>|<div.*>|</div>|<span.*>|</span>", ""); 

XmlDocument newDoc = new XmlDocument(); 
newDoc.LoadXml(tmp); 

이렇게하면 태그 사이의 모든 데이터가 보존되지만 태그 자체는 제거됩니다. 참고 :이 문서에서 일부 서식을 엉망으로 만들 수 있습니다 (많은 공백)하지만 여전히 사용할 수 있어야합니다.

당신이 준 예제에서이 문장을 실행 한 후에 이것은 출력 결과입니다.

<data> 
    <single> 

      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 


      <strong>dmcdnsbcdbn</strong> 

    </single> 
    <single> 

      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 


      <strong>dmcdnsbcdbn</strong> 

    </single> 
</data> 

임) 당신처럼 여부, 당신은 .Trim을 (실행할 수 있습니다 확실하거나로드하기 전에 문자열에 태그 사이의 모든 공백을 제거하도록 설계에도 보조 정규식 없습니다.

그에 대한 정규식 패턴은

Regex.Replace(string, "(>) *(<)", "$1$2"); 

것 또는 당신은 사용할 수 있습니다 ". *"대신 태그

을 사이에 남아있을 수있는 모든 줄 바꿈 또는 기타 특수 문자를 대체 할 특정 만드는 "*"의
관련 문제