2011-01-01 3 views
1

OpenXML SDL 2.0을 사용하여 Word 문서 내의 특정 요소 목록을 작성하려고합니다. 템플릿을 열고 모든 "w : sdt"요소에 대해 Word 서식 파일을 스캔하여 사용 가능한 문서 부분 목록으로 사용합니다. 이 목록을 사용자에게 표시하여 원하는 파트/요소를 선택하여 템플릿 문서에서 새 버전/문서 사본을 만들 수 있습니다.OpenXML SDK 2.0 XML 부품 및 요소 열거

내 목록에는 순차 요소 번호 (DocumentBuilder 클래스에서 사용)와 "w : 별칭" "val"또는 "w : tag" "val"이 필요합니다 사용자에게 선택 옵션을 표시하는 데 사용됩니다.

사용자가 사용 가능한 템플릿 XML 부품/요소를 검토하고 선택하면 DocumentBuilder를 사용하여 식별 된 부품을 일련 번호로 새 문서에 추가합니다.

필자는 성공적으로 DocumentBuilder를 사용하여 연속 된 번호로 문서 요소를 명시 적으로 식별하여 새 문서를 작성했습니다. 이것은 아름답게 작동합니다.

나는 재귀를 사용하여 템플릿 문서를 반복하고 정규화 된 요소를 LIST에 추가해야한다고 알고 있습니다. 필자는 아직 C#이나 OpenXML SDK에 익숙하지 않아 원하는 XML 파트/요소를 대상으로 템플릿 문서를 통해 재귀하는 가장 우아한 방법을 식별 할 수 없습니다.

OpenXML 문서의 부품/요소 목록을 열거 할 수있는 적용 가능한 예제를 알려줄 수 있습니까?

+0

... 연구 중이므로 Brian Jones & Zeyad의 블로그 게시물 인 "Open XML SDK를 사용하여 큰 Excel 파일 구문 분석 및 읽기"에서 SAX와 유사한 접근 방식을 찾아야한다고 생각합니다. 이를 통해 OpenXMLReader를 사용하여 XML 파트 또는 요소를 탐색 할 수 있습니다. 나는 이것을 정확하게하는 방법을 명확히하지 않고있다. 그러나 그것은가는 길과 같다. –

답변

1

성능상의 이유로 인해 OpenXmlSdk를 사용하여 문서를 열 수 없으며 LINQ 쿼리를 수행하여 각 SDT 요소를 찾을 수 있습니까? 의 라인을 따라

뭔가 :

using(WordProcessingDocument doc = WordProcessingDocument.Open(byte[], false);){ 

    IEnumerable<SdtContent> sdtElements = doc.MainDocumentPart.Body.Descendants<SdtContent>(); 
    foreach(SdtContent el in sdtElements){ 
     // Collect content tag name/alias 
     // Collect your sequential element number? 
    } 
} 

나는 전에이 방법을 사용 SdtContent 요소의 목록을 수집하는 외부 요소를 필터링했다. 순차적 요소 번호가 무엇을 의미하는지 확신 할 수 없지만?

+0

Damoe, 좋은 제안입니다. –

+0

더 자세히 조사한 후에 단락과 SDT 블록과 같은 요소를 가져 오기 위해 Builder 클래스를 사용할 수있었습니다. LINQ와 OpenXML SDK 2.0을 사용하여 IEnurmerable 개체에서 이러한 요소를 수집 할 수 있습니다. –

+0

@ damoe - Damoe, 다음과 같이 도와주세요. http : //stackoverflow.com/questions/15791732/openxml-sdk-having-borders-for-cell –