Преобразование OpenXML (WordProcessingML) в HTML, используя XSLT: Часть 1
Эта статья поможет Вам в путешествии по переводу формата OpenXML Microsoft Word в HTML. Статья покажет как стконвертировать WordprocessingML в тэги HTML, используя XSLT так, чтобы содержание документа Word просматривалось в Web браузеое. XSLT анализирует содержание XML и преобразовывает в HTML, сохраняя свойство шрифта будь то “bold”, “italic”, “underline” или др.
Процесс XLST. Процесс конвертации:
Создайте документ Word, используя Microsoft Office Word 2007(xyz.docx).
Извлеките файл “document.xml” из созданного документа.
Используйте XSLT, показанный в следующей части статьи(загрузите примеры для файла XSL) для конвертации “document.xml” в HTML.
Отрывок кода(C#) показанный в заключительной части статьи поможет в конвертации.
XSLT, используемый для конвертации
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/3/main">
<xsl:output method="html" />
<xsl:template match="/">
<xsl:apply-templates select="//w:body" />
</xsl:template>
<xsl:template match="w:body">
<html>
<head />
<body>
<pre>
<xsl:apply-templates />
</pre>
</body>
</html>
</xsl:template>
<xsl:template match="w:p">
<div>
<xsl:apply-templates select="w:r" />
</div>
</xsl:template>
<xsl:template match="w:r">
<xsl:apply-templates select="w:t" />
</xsl:template>
<xsl:template match="w:t">
<span>
<xsl:apply-templates select="../w:rPr" />
<xsl:value-of select="." />
</span>
</xsl:template>
<xsl:template match="w:rPr">
<xsl:attribute name="style">
<xsl:apply-templates />
</xsl:attribute>
</xsl:template>
<xsl:template match="w:u">text-decoration:underline;</xsl:template>
<xsl:template match="w:b">font-weight:bold;</xsl:template>
<xsl:template match="w:i">font-style:italic;</xsl:template>
</xsl:stylesheet>
Пример файла WordProcessingML взятый для конвертации (document.xml)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:o12="http://schemas.microsoft.com/office/2004/7/core" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.microsoft.com/office/omml/2004/12/core" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/3/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/3/main">
<w:body>
<w:p>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve">This is </w:t>
</w:r>
<w:r w:rsidR="00A35A66">
<w:t>simple</w:t>
</w:r>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve"> text. It preserves both spaces and line </w:t>
</w:r>
<w:r w:rsidR="00AD4F4A" w:rsidRPr="007949A6">
<w:rPr>
<w:b/>
</w:rPr>
<w:t>breaks</w:t>
</w:r>
<w:r w:rsidR="007949A6" w:rsidRPr="007949A6">
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve"> in </w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r w:rsidR="007949A6" w:rsidRPr="007949A6">
<w:rPr>
<w:b/>
</w:rPr>
<w:t>bold</w:t>
</w:r>
<w:r w:rsidR="00AD4F4A">
<w:t>.This</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve"> is preformatted text. It preserves both spaces and line </w:t>
</w:r>
<w:r w:rsidR="00AD4F4A" w:rsidRPr="0054521E">
<w:rPr>
<w:i/>
</w:rPr>
<w:t>breaks</w:t>
</w:r>
<w:r w:rsidR="007949A6">
<w:rPr>
<w:i/>
</w:rPr>
<w:t xml:space="preserve"> in </w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r w:rsidR="007949A6">
<w:rPr>
<w:i/>
</w:rPr>
<w:t>italics</w:t>
</w:r>
<w:r w:rsidR="00AD4F4A">
<w:t>.This</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve"> is </w:t>
</w:r>
<w:r w:rsidR="00A35A66">
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve">simple preformatted </w:t>
</w:r>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve"> text. It preserves both spaces and line breaks.</w:t>
</w:r>
</w:p>
<w:p/>
<w:p>
<w:pPr>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r w:rsidR="00AD4F4A" w:rsidRPr="0054521E">
<w:rPr>
<w:b/>
</w:rPr>
<w:t xml:space="preserve">New </w:t>
</w:r>
<w:r w:rsidR="0054521E" w:rsidRPr="0054521E">
<w:rPr>
<w:b/>
</w:rPr>
<w:t>Heading</w:t>
</w:r>
<w:r w:rsidR="00AD4F4A" w:rsidRPr="0054521E">
<w:rPr>
<w:b/>
</w:rPr>
<w:t>:</w:t>
</w:r>
</w:p>
<w:p>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve">This is </w:t>
</w:r>
<w:r w:rsidR="007949A6">
<w:rPr>
<w:u w:val="single"/>
</w:rPr>
<w:t>underlined</w:t>
</w:r>
<w:r w:rsidR="00AD4F4A">
<w:t xml:space="preserve"> text. It preserves both spaces and line breaks.</w:t>
</w:r>
</w:p>
<w:p>
<w:r w:rsidR="00AD4F4A">
<w:t>This is preformatted text. It preserves both spaces and line breaks.</w:t>
</w:r>
</w:p>
<w:p/>
<w:sectPr w:rsidR="00510025" w:rsidSect="00320151">
<w:pgSz w:w="12240" w:h="15840"/>
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/>
<w:cols w:space="720"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
</w:document>
Отрывок Кода
Следующий отрывок кода(C#) конвертирует “document.xml” в HTML, используя XSLT.
Этот код, также вызывает браузер(IE) для отображения отконвертированного файла HTML.
try
{
// strXMLFilePath holds the absolute path of the extracted //“Document.xml” file from the word document(*.docx)
string strXMLFilePath = @"C:\Hello.docx\word\document.xml";
// Lets save the XSLT (shown in the article) to a file called //“OpenXml_XSLT.xsl”
// strXSLFilePath holds the absolute path of the “OpenXml_XSLT.xsl”
string strXSLFilePath = @"C:\FolderXSLT\OpenXml_XSLT.xsl";
// strHtmlFilePath holds the file name & path of the HTML file to be
// generated.In this case we save it inside the folder that holds // the Document.xml
string strHtmlFilePath = Path.Combine(Path.GetDirectoryName(strXMLFilePath), "xyz.html");
//Load the Document.xml file into XmlDocument object
System.Xml.XmlDocument objXmlDom = new XmlDocument();
objXmlDom.Load(strXMLFilePath);
//Load the XSL file(OpenXml_XSLT.xsl) into the XslCompiledTransform object
System.Xml.Xsl.XslCompiledTransform objXSLT = new XslCompiledTransform();
objXSLT.Load(strXSLFilePath);
// The Transform method converts the XML to HTML and stores the HTML file
// in the path specified in the variable strHtmlFilePath
objXSLT.Transform(strXMLFilePath,strHtmlFilePath );
//The Process.Start method invokes the browser (IE) ,which displays the
// converted HTML file.
System.Diagnostics.Process.Start("IExplore.exe", strHtmlFilePath);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Конечный html (после конвертации)
<html xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/3/main">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<pre>
<div>
<span>This is </span>
<span>simple</span>
<span> text. It preserves both spaces and line </span>
<span style="font-weight:bold;">breaks</span>
<span style="font-weight:bold;"> in </span>
<span style="font-weight:bold;">bold</span>
<span>.This</span>
<span> is preformatted text. It preserves both spaces and line </span>
<span style="font-style:italic;">breaks</span>
<span style="font-style:italic;"> in </span>
<span style="font-style:italic;">italics</span>
<span>.This</span>
<span> is </span>
<span style="font-weight:bold;">simple preformatted </span>
<span> text. It preserves both spaces and line breaks.</span>
</div>
<div></div>
<div>
<span style="font-weight:bold;">New </span>
<span style="font-weight:bold;">Heading</span>
<span style="font-weight:bold;">:</span>
</div>
<div>
<span>This is </span>
<span style="text-decoration:underline;">underlined</span>
<span> text. It preserves both spaces and line breaks.</span>
</div>
<div>
<span>This is preformatted text. It preserves both spaces and line breaks.</span>
</div>
<div></div>
</pre>
</body>
</html>
Источник:
Перевод: lexa
По теме
- Видео-курсы от MS: Разработка приложений виртуальной и расширенной реальности на платформе Microsoft
- ECMA JavaScript 6: Объекты
- Как просто создать приложение для iPhone
- Разработка приложений под Windows Phone 8
- Индексированное хранилище, часть 2
- Индексированное хранилище, часть 1
- Начала Metro-программирования: создание настраиваемых приложений (ч.2)
- Начала Metro-программирования: создание настраиваемых приложений (ч.1)
- Начала Metro-программирования: создание компонентов WinRT (ч.3)
- Начала Metro-программирования: создание компонентов WinRT (ч.2)