2012-05-09 1 views
0

У меня есть XSLT-файл, который преобразует XML в текстовый документ. Моя проблема заключается в том, что я хочу добавить верхние и нижние колонтитулы в документе. Как мне это сделать?Добавление верхнего и нижнего колонтитула в файл XSLT

Мой вопрос в основном похож на этот Header and footer and page numbers using xslt.

Дополнительную информацию о других разделах и ценаях можно получить here. В основном мне нужно использовать эти теги, но как использовать его в своем шаблоне? Я положил его в конце или где-то посередине? Я также хотел бы изменить макет страницы слова на пейзаж, который является портретом по умолчанию.

<fo:region-before> defines the top region (header) 
<fo:region-after> defines the bottom region (footer) 

Предположим, что это мой XSLT

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Artist</th> 
     </tr> 
     <xsl:for-each select="catalog/cd"> 
     <tr> 
      <td><xsl:value-of select="title"/></td> 
      <td><xsl:value-of select="artist"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

Приведенный выше пример был скопирован с w3school

+0

вы можете получить свой вопрос немного больше контекста? возможно, предоставить ваш входной документ, преобразование, которое у вас есть в настоящее время, ожидаемые результаты. Могут быть и фрагменты. трудно понять иначе –

+0

Я включил пример XSLT. У меня нет проблем с извлечением данных. Моя единственная проблема заключается в том, чтобы вставлять верхние и нижние колонтитулы. –

+2

Подождите минуту ... что-то не складывается. зачем вам нужны xsl-fo заголовки/нижние колонтитулы в HTML? вам придется заложить свою проблему, чтобы быть близкой к тому, с чем вы действительно боретесь. –

ответ

0

Как сказано в большом количестве комментариев, не генерировать HTML, но либо XSL-FO, либо Word XML полностью. Поскольку Word XML является самым прямым подходом, я помогу вам с наименьшим образцом, который я мог бы подумать, который возвращает что-то похожее на ваш HTML, но с верхним и нижним колонтитулом. На самом деле, я только что открыл полученный HTML в Word, сохранил его как Word XML, добавил верхний и нижний колонтитул и избавился от большей части пометок.

Вставьте следующие внутри шаблона XSL корня, добавьте для каждого вокруг строк таблицы и заполнить верхний/нижний колонтитул динамически, как вам нравится ..

<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"> 

<w:docPr> 
<w:view w:val="print"/> 
<w:zoom w:percent="100"/> 
</w:docPr> 

<w:styles> 
<w:style w:type="paragraph" w:styleId="Heading2"> 
<w:name w:val="heading 2"/> 
<wx:uiName wx:val="Heading 2"/> 
<w:basedOn w:val="Standaard"/> 
<w:pPr> 
<w:spacing w:before="100" w:before-autospacing="on" w:after="100" w:after-autospacing="on"/> 
<w:outlineLvl w:val="1"/> 
</w:pPr> 
<w:rPr> 
<w:b/> 
<w:sz w:val="36"/> 
</w:rPr> 
</w:style> 

<w:style w:type="paragraph" w:styleId="Headertext"> 
<w:name w:val="header"/> 
<wx:uiName wx:val="Header text"/> 
<w:basedOn w:val="Standaard"/> 
<w:pPr> 
<w:tabs> 
<w:tab w:val="center" w:pos="4536"/> 
<w:tab w:val="right" w:pos="9072"/> 
</w:tabs> 
</w:pPr> 
</w:style> 

<w:style w:type="paragraph" w:styleId="Footertext"> 
<w:name w:val="footer"/> 
<wx:uiName wx:val="Footer text"/> 
<w:basedOn w:val="Standaard"/> 
<w:pPr> 
<w:tabs> 
<w:tab w:val="center" w:pos="4536"/> 
<w:tab w:val="right" w:pos="9072"/> 
</w:tabs> 
</w:pPr> 
</w:style> 
</w:styles> 

<w:body> 
<w:p> 
<w:pPr> 
<w:pStyle w:val="Heading2"/> 
</w:pPr> 
<w:r> 
<w:t>My CD Collection</w:t> 
</w:r> 
</w:p> 

<w:tbl> 
<w:tblPr> 
<w:tblW w:w="5000" w:type="pct"/> 
<w:tblCellSpacing w:w="15" w:type="dxa"/> 
<w:tblBorders> 
<w:top w:val="outset" w:sz="6" wx:bdrwidth="15" w:space="0" w:color="auto"/> 
<w:left w:val="outset" w:sz="6" wx:bdrwidth="15" w:space="0" w:color="auto"/> 
<w:bottom w:val="outset" w:sz="6" wx:bdrwidth="15" w:space="0" w:color="auto"/> 
<w:right w:val="outset" w:sz="6" wx:bdrwidth="15" w:space="0" w:color="auto"/> 
</w:tblBorders> 
<w:tblCellMar> 
<w:top w:w="15" w:type="dxa"/> 
<w:left w:w="15" w:type="dxa"/> 
<w:bottom w:w="15" w:type="dxa"/> 
<w:right w:w="15" w:type="dxa"/> 
</w:tblCellMar> 
<w:tblLook w:val="04A0"/> 
</w:tblPr> 
<w:tr> 
<w:tc> 
<w:p> 
<w:r> 
<w:rPr> 
<w:b/> 
</w:rPr> 
<w:t>Title</w:t> 
</w:r> 
</w:p> 
</w:tc> 
<w:tc> 
<w:p> 
<w:r> 
<w:rPr> 
<w:b/> 
</w:rPr> 
<w:t>Artist</w:t> 
</w:r> 
</w:p> 
</w:tc> 
</w:tr> 
<w:tr> 
<w:tc> 
<w:p> 
<w:r> 
<w:t>title1</w:t> 
</w:r> 
</w:p> 
</w:tc> 
<w:tc> 
<w:p> 
<w:r> 
<w:t>artist1</w:t> 
</w:r> 
</w:p> 
</w:tc> 
</w:tr> 
<w:tr> 
<w:tc> 
<w:p> 
<w:r> 
<w:t>title2</w:t> 
</w:r> 
</w:p> 
</w:tc> 
<w:tc> 
<w:p> 
<w:r> 
<w:t>artist2</w:t> 
</w:r> 
</w:p> 
</w:tc> 
</w:tr> 
</w:tbl> 

<w:p /> 

<w:hdr w:type="odd"> 
<w:p> 
<w:pPr> 
<w:pStyle w:val="Headertext"/> 
</w:pPr> 
<w:r> 
<w:t>Header text</w:t> 
</w:r> 
<w:r> 
<w:tab/> 
<w:t>center</w:t> 
</w:r> 
<w:r> 
<w:tab/> 
<w:t>right</w:t> 
</w:r> 
</w:p> 
</w:hdr> 

<w:ftr w:type="odd"> 
<w:p> 
<w:pPr> 
<w:pStyle w:val="Footertext"/> 
</w:pPr> 
<w:r> 
<w:t>left</w:t> 
</w:r> 
<w:r> 
<w:tab/> 
<w:t>Footer text</w:t> 
</w:r> 
<w:r> 
<w:tab/> 
</w:r> 
<w:r> 
<w:fldChar w:fldCharType="begin"/> 
</w:r> 
<w:r> 
<w:instrText>PAGE \* MERGEFORMAT</w:instrText> 
</w:r> 
<w:r> 
<w:fldChar w:fldCharType="separate"/> 
</w:r> 
<w:r> 
<w:t>1</w:t> 
</w:r> 
<w:r> 
<w:fldChar w:fldCharType="end"/> 
</w:r> 
</w:p> 
</w:ftr> 
</w:body> 
</w:wordDocument> 

Это также помогает убедиться, что следующая обработка -настройка добавляется до корневого элемента:

<?mso-application progid="Word.Document"?> 

HTH!

+0

Альтернативой созданию HTML будет создание «плоского» OPC-файла (через XSLT), который Word 2007/2010 может читать/писать. – JasonPlutext

+0

@jason Flat OPC более сложна, чем Word 2003 XML. – grtjn

+0

Плоский OPC - это современный формат, который можно легко преобразовать в/из стандартов WordML (т.е. ECMA 376). Word 2003 XML теперь составляет 10 лет, и хотя схема доступна, я не думаю, что для нее существует публичная спецификация. – JasonPlutext