2009-12-15 4 views
1

일반 텍스트와 함께 xml 태그가 포함 된 단어 템플릿 (점/점)이 있습니다.
런타임에 xml 태그를 각각의 편지 병합 필드로 바꿔야합니다.Regex 또는 XML 파서 C#

따라서 이러한 xml 태그에 대한 문서를 구문 분석하고 병합 필드로 바꿔야합니다. Regex를 사용하여이 xml 태그를 찾아 교체했습니다. 그러나 XML 파서를 사용하여 XML 태그를 구문 분석하도록 제안되었습니다 ([Regex for string enclosed in <*>, C#).

Solicitor Letter 

<Tfirm/> 
<Tbuilding/> 
<TstreetNumber/> <TstreetName/> 

For the attention of: <TContact1/> <TEmail/> 


Dear <TContact1/> 

RE: <Pbuilding/> <PstreetNumber/> <PstreetName/> <Pvillage/> <PTown/> 

We were pleased to hear that contracts have now been exchanged in the sale of the 
above property on behalf of our mutual client/s. We now have pleasure in enclosing a 
copy of our invoice for your kind attention upon completion. 

.... 

한 번 더 참고, 꺾쇠 괄호는 템플릿의 최종 사용자가 수동으로 입력됩니다

샘플 문서처럼 보인다.

XMLReader를 사용해 보았지만 내 문서에 루트 태그가 없어 오류가 발생했습니다.

Regex를 고수해야하거나 XML Parser를 사용할 수있는 방법이 있는지 안내해주십시오.

감사합니다.

+1

XML 파서는 어떤을 위해 사용되어야한다고 생각 여기에 일부 사람들이있다 그 안에는 XML을 닮은 막연한 것들이 있습니다. 그들을 무시하라. 해머가 XML 구문 분석기 일 때, 각괄호가있는 모든 것은 손톱처럼 보입니다. –

+1

사람들은 당신이 XML처럼 보였을 때 XML 파서를 제안했습니다. 하지만 여기서 우리는 전체 이야기를 보았습니다. (a)는 XML이 아니며 (b)는 정규 언어입니다. 그래서 정규식은 괜찮아 보입니다. – Ken

+0

그게 나야, 아니면이 편지가 그 피싱/스팸/사기 이메일 중 하나와 같이 읽습니까? "우리는 듣고 기쁘게 ..."? "네 친절한주의"? 어떤 관공서 나 사업체가 이런 식으로 의사 소통을합니까? 마커 대신 자신의 이름과 주소를 입력하십시오. 영국 복권 당첨 사실을 알리는 전자 메일 메시지와 정확히 똑같이 들립니다. – Cheeso

답변

8

XML 문서로 구조화 할 수 없다면 .NET 라이브러리에서 XML을 읽는 도구는 완전히 쓸모가 없습니다.

XML이 아닙니까? XML로 규정 할 수있는 하나 또는 두 개의 태그를 갖는 것은 XML 문서를 작성하는 것이 아닙니다. 문제는 단순히 XML 규칙을 따르지 않는다는 것입니다.

이야기의 도덕은 당신이 이것을 분석하기 위해 자신의 방법을 고안해야한다는 것입니다. RegEx kool-aid를 마시고 싶다면 그 해결책이 가장 좋습니다. 물론,이 고양이를 껍질을 벗기는 방법이 많이 있습니다.

2

나를 XML 처리하는 것처럼 보이지 않습니다. XML 문서가 아닙니다. 스트레이트 문자열 대체품과 비슷해 정규 표현식을 사용하는 것이 좋습니다.

3

실제로 XML을 사용하지 않는 것처럼 보입니다. 대체 할 자리 표시 자로 XML과 비슷한 토큰을 사용하는 것 같습니다.

그런 경우 Regex를 사용해야합니다.

0

XML 파서는 XML을 찾는 데 도움이되지 않습니다. XML의 특정 부분을 이해하는 데 도움이됩니다. XML을 찾으려면 Regex와 같은 다른 메커니즘이 필요합니다.

3

나는 둘 다 제안하지 않을 것이다. Microsoft는 Microsoft Office가 설치되지 않은 상태에서 열린 xml 형식의 문서를 수정하기위한 C#의 무료 라이브러리를 제공합니다.

OpenXML SDK

0

은 대부분의 응답의 저자는 질문을주의 깊게 읽어 didnt는 것 같다.

inutan은 Word 문서를 구문 분석 할 무언가를 요구하고 있습니다.Word 문서를 docx 형식으로 저장하면 실제로 XML 판독기 또는 XPathReader에서 읽을 수있는 XML 파일이되지만 수행하지 않아도됩니다.

일반적으로 Word와의 편지 병합에는 프로그래밍 및 XML이 필요하지 않습니다. http://helpdesk.ua.edu/training/word/merg07.html

그러나 Word 서식 파일에 XML과 같은 필드가 있고 값으로 바꾸려면 Word 자동화 개체를 사용하는 것이 좋습니다.

다음은 VBA 코드의 예입니다. 다른 언어의 유사한 코드는 MS Office 개발 사이트 http://msdn.microsoft.com/en-us/library/bb726434.aspx을 참조하십시오. 예를 들어, 당신은 .NET을 사용하는 경우 - 당신은 오피스 interops를 사용해야하며, 무엇보다도 오피스 개발을위한 MS Visual Studio 도구를 설치하는 것입니다 http://msdn.microsoft.com/en-us/library/5s12ew2x.aspx

With Selection.Find 
     .Text = "<TContact1/>" 
     .Replacement.Text = "TContact1" 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute Replace:=wdReplaceAll