2011-02-02 3 views
0

하자 우리는 문자열 변수가 있다고 가정 : 거기에 일부 HTML 태그를 포함 할 수 있습니다텍스트를 태그로 캡슐화하는 방법은 무엇입니까?

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>" 
  • 문자열입니다.

    string output = "<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>" 
    

    어떻게 C#에서이 작업을 수행 :

문제는 내가 어떤 태그에 각각 "비 taged"텍스트 부분을 encapsule 수있는이 같은 떨어지게을 얻는 방법인가? 정규 표현식? 어떻게 정규 표현식을 보일까요?

어쩌면 캡슐화, 내가 필요로하는 것은에서 XML 구조를 만들 수없는 좋은 시작이다 : 나는이 코드는 가지 실패한다

XDocument xml = XDocument.Parse("<plain>First regular, </plain><b>bold</b><plain>,</plain><i>italic</i><plain>,</plain><u>underline</u><plain>,</plain><b><i><u>bold+italic+underline</u></i></b>")

+0

당신은 질문이 명확하지 않다. 어떻게 태그가없는 컨텐트를 ANY 태그에 넣을 계획입니까? 두 예제 텍스트는 모두 동일합니다 .. 어떤 태그가 ... U 이야기하고 있습니까? HTML –

+0

우리는 그 이상의 정보가 필요합니다. 자, 첫 번째 반응은 xml을 정규식으로 파싱 할 수 없다는 것입니다. 그러나 xml의 하위 세트로 작업한다면 어쩌면 어쩌면 어쩌면 우리가 뭔가를 할 수 있습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – DonkeyMaster

+1

중첩이 필요하면 정규식을 사용하지 않는 것이 좋습니다. 그것을 처리하십시오. – leppie

답변

0

를 만들 필요가

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>" 

하지만, 그것은 올바른 경로에 당신을 가져야한다 :

string input = "First regular, <b>bold</b>,<i>italic</i>,<u>underline</u>,<b><i><u>bold+italic+underline</u></i></b>"; 
input = "<data>" + input + "</data>"; 
XmlDocument xml = new XmlDocument(); 
xml.InnerXml = input; 
XmlNodeList nodes = xml.SelectNodes("//text()"); 
foreach (XmlNode node in nodes) { 
    if (node.ParentNode.Name != "b" && node.ParentNode.Name != "i" && node.ParentNode.Name != "u") { 
     node.InnerText = "^^^^^" + node.InnerText + "$$$$$"; 
    } 
} 
input = xml.DocumentElement.InnerXml.Replace("^^^^^", "<plain>").Replace("$$$$$", "</plain>"); 
관련 문제