2012-05-10 3 views
1

XML 및 일반 문자열을 포함 할 수있는 문자열이 있습니다. 문자열의 모든 인스턴스에 대해 <math....</math>을 파싱해야합니다. 어떻게하면이 문자열의 여러 섹션 (<math>에서 </math>까지)을 파싱 할 수 있습니까?C#에서 문자열의 여러 섹션을 구문 분석하는 명확한 방법은 무엇입니까?

Here is some content <math 
xmlns="http://www.w3.org/1998/Math/MathML"> 
<mi>a</mi><mo>&#x2260;</mo><mn>0</mn> </math>, that is mixed in with 
this other content <math xmlns="http://www.w3.org/1998/Math/MathML"> 
<mi>a</mi><msup><mi>x</mi><mn>2</mn></msup> <mo>+</mo> 
<mi>b</mi><mi>x</mi> <mo>+</mo> <mi>c</mi> <mo>=</mo> <mn>0</mn> 
</math> we want to be able to seperate this string 

배경 : 나는이 질문은 일반적인 만들기 위해 노력했다. 구체적으로 MVC3 인코딩과 Raw를 비교하려고합니다. 기본적으로 모든 것을 인코딩합니다. MathML을 인코딩하는 것을 원하지 않지만 다른 모든 것을 인코딩하려고합니다. 그래서 그것의 일부를 Html.Raw (MathML 부분)로 렌더링하고 나머지는 일반적으로 인코딩 된 문자열로 렌더링하려고합니다.

+0

있습니까? 다소 일관성없는 데이터 형식을 "깨끗한"방식으로 구문 분석하는 것은 종종 어렵습니다. –

+0

예,이 데이터의 입력은 문자열입니다. 나는 더 나은 파싱을 돕기 위해 무엇이든 변환 할 수 있다고 생각한다. – Shane

+2

음, 문자열의 형식을 의미합니다. 문자열은 괜찮지 만 대부분의 경우 XML을 non-xml과 혼합하는 것은 나쁜 생각입니다. 호환되는 XML이라면 .NET의 XML 파서를 사용할 수 있습니다. –

답변

0

정규 표현식이 아닙니다.하지만 이것은 내가 시도한 것이며 올바른 결과를 얻었습니다. 기본으로 사용하고 필요한 경우 수정하십시오.

나는 이것을 post에서 Stackoverflow에 가져 왔습니다.

string yourstring = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"> <mi>a</mi><mo>&#x2260;</mo><mn>0</mn> </math>, that is mixed in with this other content <math xmlns=\"http://www.w3.org/1998/Math/MathML\"> <mi>a</mi><msup><mi>x</mi><mn>2</mn></msup> <mo>+</mo> <mi>b</mi><mi>x</mi> <mo>+</mo> <mi>c</mi> <mo>=</mo> <mn>0</mn> </math>"; 

try 
{ 
    yourstring = Regex.Replace(yourstring, "(<math[^>]+>.+?</math>)", ""); 
} 
catch (ArgumentException ex) 
{ 
    // Syntax error in the regular expression 
} 

결과 문자열은 다음과 같습니다 당신은이 데이터의 형식을 변경할 수

, that is mixed in with this other content 
+0

가 작동 할 수 있습니다. 내가 그걸 가지고 놀고 내가 그것을 얻을 수 있는지 알아 봅시다. – Shane

1

일반적으로 XML의 형식이 올바르지 않거나 적어도 일관되게 형식화 될 것으로 예상되는 경우 regular expressions을 사용하여 XML을 제거 할 수 있어야합니다.

Expresso으로 실험하여 표현을 조작 할 수 있습니다.

스트립 아웃 XML을 구문 분석하려면 .NET XMLParser에 대한 작업입니다.

관련 문제