Поместите полный путь узла xml в файл атрибутов и прочтите значение узла из основного файла xsl в xsl fo

Я использовал fop 0.95 для создания файлов pdf из данных xml. У меня в процессе задействованы три файла: test.xml, test.xsl и attributes.xsl. Естественно, у меня есть данные xml в файле xml. Здесь test.xml - это основной файл xsl, который импортирует наборы атрибутов из файла attributes.xsl. Например, у меня есть следующие записи в файле attributes.xsl:

<xsl:attribute-set name="headerTable" foa:class="table">
    <xsl:attribute name="table-layout">fixed</xsl:attribute>
    <xsl:attribute name="width">6.05in</xsl:attribute>
    <xsl:attribute name="text-align">left</xsl:attribute>
    <xsl:attribute name="white-space-collapse">false</xsl:attribute>
</xsl:attribute-set>

Теперь мое требование - поместить имя атрибута в файл атрибутов и сохранить связанные значения в XML-файле. Сюда:

<MyRoot>
   <tableHeader>
      <tableLayout>fixed</tableLayout>
      <width>6.05in</width>
      <textAlign>left</textAlign>
      <whiteSpaceCollapse>false</whiteSpaceCollapse>
   </tableHeader>
</MyRoot>

После этого у меня будет следующий файл атрибутов:

<xsl:attribute-set name="headerTable" foa:class="table">
   <xsl:attribute name="table-layout">MyRoot/tableHeader/tableLayout</xsl:attribute>
   <xsl:attribute name="width">MyRoot/tableHeader/width</xsl:attribute>
   <xsl:attribute name="text-align">MyRoot/tableHeader/textAlign</xsl:attribute>
   <xsl:attribute name="white-space-collapse">MyRoot/tableHeader/whiteSpaceCollapse</xsl:attribute>
</xsl:attribute-set>

Как обычно, я использую атрибут из основного файла xsl следующим образом:

<fo:table xsl:use-attribute-sets="headerTable">
   <fo:table-column column-width="3in"></fo:table-column>
   <fo:table-column column-width="3.5in"></fo:table-column>
   <fo:table-body>
      <!--table rows and cells goes here-->             
   </fo:table-body>
</fo:table>

При выполнении я получаю следующую ошибку:

"Ignoring property: table-layout="MyRoot/tableHeader/tableLayout" <Illegal character; property:'table-layout'>"

Кто-нибудь знает, как это сделать? Спасибо.


person sangam    schedule 24.11.2009    source источник


Ответы (1)


После блуждания по разным веб-сайтам и отсутствия ответа на свой вопрос у меня возникли трудности с этой проблемой. Обдумывая проблему и выполняя пробные и пробные версии, я просто вставил эту строку:

<xsl:attribute name="width">
     <xsl:value-of select="MyRoot/tableHeader/width">
     </xsl:value-of>
</xsl:attribute>

вместо следующего в файле атрибутов:

<xsl:attribute name="width">MyRoot/tableHeader/width</xsl:attribute>

И я сделал то же самое для всех этих путей к xml-узлам, размещенных в файле атрибутов. Это сработало потрясающе! Спасибо.

person sangam    schedule 03.12.2009