2012-06-12 2 views
1

Моя текущая цель немного сложна, но я постараюсь объяснить ее как можно лучше. У нас есть часть программного обеспечения, которое в течение нескольких месяцев генерирует XML-журналы для всех видов использования. Кто-то еще проанализировал эти данные, которые они сочли необходимыми для документации, и поместил все это в читаемый формат HTML.Изменить Docx со ссылками с помощью XML

Моя задача - найти способ связывания прочитанных HTML-файлов, которые они сгенерировали, с уже существующим документом Word (.docx). Я в настоящее время есть сценарий NAnt, который читает через каталог, содержащий журналы и создает документ XML с форматом:

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

Слово документ сам по себе содержит таблицы, которые держат названия функций. Эти таблицы находятся под заголовками, которые содержат название продукта. Мне нужно привязать ссылку к адресу, связанному с функцией вокруг имени функции внутри таблицы, чтобы кто-то, читающий документацию, мог легко щелкнуть имя функции и посмотреть документацию функции.

У меня нет опыта процедурной модификации текстовых документов, поэтому мне очень понравилась бы помощь в этом, поскольку это кажется довольно сложной процедурой. Я могу легко переупорядочить XML-узлы, если бы это упростило процесс.

вещей я исследовал до сих пор:

  • Прежде чем рассматривать форматирование DOCX, я хотел написать еще один сценарий, который будет просто искать соответствующие данные, а затем обернуть теги гиперссылка вокруг него. К сожалению, как только я заглянул в docx, кажется, что форматирование намного сложнее.

  • После этого я решил посмотреть на использование C# через Visual Studio 2010. К сожалению, поскольку у меня нет опыта использования C# (я использовал только C и C++), это было довольно запутанно. Я потратил несколько дней на поиски руководств и ссылок, но все это очень разбросано, и я не могу найти то, что ищу.

ответ

2

три метода для вашего комплекта сумки:

  1. Пользовательские XML-привязки данных. С этим вы можете вставить XML-документ в свой docx и автоматически получить данные (связанные через XPath). Не внутри гиперссылки, так что это может не сработать для вас. Хотя вы можете запустить макрос AutoOpen, когда docx сначала открывается в Word, чтобы преобразовать текст в гиперссылки.

  2. AltChunk. С этим вы можете включить HTML в свой docx. Однако вам нужно будет изменить docx. (См. 3 ниже)

  3. Плоский OPC XML. Это представление docx как единого XML-файла, Word 2007 или более поздняя версия может радостно читать или писать. Используя это, вы можете заменить строку гиперссылки с помощью выбранного вами инструмента. Вы также можете использовать это представление, чтобы было проще вставлять содержимое в AltChunks, если хотите.

Небольшая проблема с заменой гиперссылок заключается в том, что вы должны сделать это в двух местах. Во-первых, текст ссылки отображается пользователю в самом документе (document.xml), а во-вторых, целевой URL (в части отношений). Они связаны друг с другом.

Если вы используете AltChunk, вы можете заменить его в одном месте. Не знаете, сколько времени у вас есть, и получите ли вы проблемы с производительностью, если у вас есть сотни AltChunks (даже если они в основном содержат только одну гиперссылку).

Вот пример Flat OPC файл XML, содержащий HTML AltChunk (который вы должны быть в состоянии сохранить и перетащить на слово или сделать File> Open):

<?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><body><p><a href="http://stackoverflow.com">StackOverflow</a></p></body></html>" 

base64 закодирован (как требуется форматом Flat OPC XML).

+0

Одна из моих самых больших проблем в том, что я даже не знаю, с чего начать. AltChunk выглядит так, как будто это было бы хорошо, за исключением того, что я не знаю, как найти данные, которые нужно изменить в первую очередь. В настоящее время я смотрю на Word Interop на C#, надеясь, что он может дать некоторые ответы, но до сих пор мне не повезло. Есть ли помощь, которую вы можете предложить при фактической навигации по содержимому документа Word? – SwarthyMantooth

+0

См. Рабочий пример, который я добавил в свой ответ. Обратите внимание, что тег altChunk находится там, где будет вставлен HTML, обозначенный «rId2». При таком подходе у вас будет 1 гиперссылка, предоставляемая каждым altChunk. Все, что вам нужно сделать, это base64 закодировать его. – JasonPlutext

+0

О, ничего себе. Это огромная помощь. Я должен был открыть это как независимый файл, чтобы увидеть ссылку. Как именно я должен вставить его в существующий документ? – SwarthyMantooth

Смежные вопросы