2012-06-12 4 views
1

현재 목표는 조금 복잡하지만 가능한 한 최선을 다해 설명하겠습니다. 우리는 지난 몇 달간 모든 용도의 XML 로그를 생성 해 온 소프트웨어를 가지고 있습니다. 다른 사람들은이 데이터에서 파싱하여 문서화에 필요한 것으로 판단한 내용을 모두 읽을 수있는 HTML 형식으로 배치했습니다.XML을 사용하여 링크가있는 Docx 수정

내 직업은 생성 된 읽을 수있는 HTML 파일을 기존 Word (.docx) 문서와 연결하는 방법을 찾는 것입니다. 자체가 함수 이름을 잡고 테이블을 포함

<root> 
    <HTML address=...> 
     <ProductName name=...> 
      <FunctionName name=...> 
      </FunctionName> 
     </ProductName> 
    </HTML> 
</root> 

단어 문서 : 저는 현재 형식의 XML 문서를 로그를 포함하고 생성하는 디렉토리를 통해 읽는은 NAnt 스크립트가 있습니다. 이 테이블은 제품 이름이 들어있는 헤더 아래에 있습니다. 필자는 문서를 읽는 사람이 함수 이름을 쉽게 클릭하고 함수의 문서를 볼 수 있도록 테이블 내부의 함수 이름과 관련된 주소에 대한 링크를 래핑해야합니다.

나는 절차 적으로 단어 문서를 수정하는 경험이 없으므로, 상당히 복잡한 절차처럼 보이기 때문에이 문서에 대한 도움을 정말 좋아할 것입니다. 어떤 방법 으로든 프로세스를 단순화하면 XML 노드를 쉽게 재정렬 할 수 있습니다.

것들 지금까지 연구했습니다

  • DOCX의 형식으로보기 전에, 나는 단순히 관련 데이터를 검색 한 후 주위에 하이퍼 링크 태그를 포장 할 또 다른 스크립트를 작성하고 싶어했다. 불행히도 일단 docx를 살펴 본다면 형식화가 훨씬 복잡해 보입니다.

  • 그 후 Visual Studio 2010을 통해 C#을 사용하기로 결정했습니다. 불행히도 C#을 사용한 경험이 없으므로 (C 및 C++ 만 사용함) 상당히 혼란 스러웠습니다. 나는 가이드와 참고 문헌을 찾고 며칠을 보냈지 만, 그것은 모두 매우 흩어져있어 내가 찾고있는 것을 찾을 수없는 것 같습니다. 키트 가방에 대한

답변

2

세 가지 기술 :

  1. 사용자 정의 XML 데이터는 바인딩. 이를 통해 XML 문서를 docx에 삽입하고 데이터 (XPath를 통해 링크 됨)가 자동으로 표시되게 할 수 있습니다. 하이퍼 링크 내부가 아니기 때문에이 방법이 효과가 없을 수 있습니다. Word에서 docx가 처음 열릴 때 AutoOpen 매크로를 실행하여 텍스트를 하이퍼 링크로 변환 할 수 있습니다.

  2. AltChunk. 이것을 사용하여 docx 내에 HTML을 포함 할 수 있습니다. 그래도 docx를 수정해야합니다. (아래 3 참조)

  3. 플랫 OPC XML. 이것은 docx를 단일 XML 파일로 표현한 것으로, Word 2007 이상에서는 행복하게 읽고 쓸 수 있습니다. 이를 사용하여 선택한 도구를 사용하여 하이퍼 링크의 내용을 문자열로 바꿀 수 있습니다. 원하는 경우이 표현을 사용하여 AltChunks에 내용을 쉽게 삽입 할 수 있습니다.

하이퍼 링크 교체시 약간의 문제는 2 개 장소에서해야한다는 것입니다. 첫째, 문서 자체 (document.xml)에서 사용자에게 표시되는 링크 텍스트와 두 번째로 (관계 부분의) 대상 URL입니다. 이들은 relId에 의해 함께 묶여있다.

AltChunk를 사용하는 경우 한 곳에서 바꿀 수 있습니다. 문서의 길이와 AltChunks가 수백 개있는 경우 (기본적으로 단일 하이퍼 링크 만 포함하더라도) 성능 문제가 발생할지 여부는 확실하지 않습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"> 
    <pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/_rels/.rels"> 
     <pkg:xmlData> 
      <rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships"> 
       <rel:Relationship Id="rId1" Target="word/document.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"/> 
      </rel:Relationships> 
     </pkg:xmlData> 
    </pkg:part> 
    <pkg:part pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" pkg:name="/word/document.xml"> 
     <pkg:xmlData> 
      <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" > 
       <w:body> 
        <w:altChunk r:id="rId2"/> 
        <w:sectPr> 
         <w:pgSz w:code="1" w:h="15840" w:w="12240"/> 
         <w:pgMar w:bottom="1440" w:left="1440" w:right="1440" w:top="1440"/> 
        </w:sectPr> 
       </w:body> 
      </w:document> 
     </pkg:xmlData> 
    </pkg:part> 
    <pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/word/_rels/document.xml.rels"> 
     <pkg:xmlData> 
      <rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships"> 
       <rel:Relationship Id="rId2" Target="../chunk.html" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk"/> 
      </rel:Relationships> 
     </pkg:xmlData> 
    </pkg:part> 
    <pkg:part pkg:compression="store" pkg:contentType="text/html" pkg:name="/chunk.html"> 
     <pkg:binaryData>PGh0bWw+PGJvZHk+PHA+PGEgaHJlZj0iaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tIj5TdGFja092ZXJmbG93PC9hPjwvcD48L2JvZHk+PC9odG1sPg==</pkg:binaryData> 
    </pkg:part> 
    <pkg:part pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:name="/_rels/chunk.html.rels"> 
     <pkg:xmlData> 
      <rel:Relationships xmlns:rel="http://schemas.openxmlformats.org/package/2006/relationships"/> 
     </pkg:xmlData> 
    </pkg:part> 
</pkg:package> 

바이너리 데이터가

입니다 : 여기

는 HTML AltChunk을 포함하는 평면 OPC XML 파일의 예입니다 (이 저장하고 말씀에 드래그> 파일 열기를 할 수있을한다고)
"<html><body><p><a href="http://stackoverflow.com">StackOverflow</a></p></body></html>" 

base64 (Flat OPC XML 형식에서 요구됨).

+0

가장 큰 문제점 중 하나는 어디서부터 시작해야할지조차 모르겠다는 것입니다. AltChunk는 처음부터 수정 된 데이터를 찾는 방법을 모르겠다는 사실을 제외하면 좋을 것 같습니다. 현재 C#의 Word interop을보고 있는데, 일부 답변을 제공하기를 기대했지만 지금까지는 운이 없었습니다. Word 문서의 내용을 실제로 탐색 할 때 도움이 될만한 것이 있습니까? – SwarthyMantooth

+0

답변을 추가 한 작업 예제를 참조하십시오. altChunk 태그는 'rId2'로 표시된 HTML이 삽입되는 곳입니다. 이 접근법에서는 각 altChunk가 제공하는 하이퍼 링크가 하나씩 있습니다. base64로 인코딩하면됩니다. – JasonPlutext

+0

와우. 그것은 큰 도움이됩니다. 하지만 링크를 실제로 보려면 독립적 인 파일로 열어야했습니다. 얼마나 정확하게 기존 문서에 삽입합니까? – SwarthyMantooth