2015-12-04 4 views
0

мне нужно добавить атрибут начальной страницы-номер в тег ВОК: последовательностьдобавления атрибута к существующему узлу

тха тег

<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence> 
.. 
... 
</fo:page-sequence> 

стать

<fo:page-sequence master-reference="alternating" initial-page-number="1"> 
.. 
</fo:page-sequence> 

, но с xslt i получить два fo: page:

<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence> 
</fo:page-sequence></fo:page-sequence> 

Как заменить старый fo: page-sequence на новый?

Это мой XSL таблицы стилей:

<xsl:stylesheet> 

<xsl:template match="ss:split/fo:page-sequence"> 
<xsl:choose> 
<xsl:when test="@master-reference['alternating']"> 
    <xsl:element name="fo:page-sequence"> 
     <xsl:for-each select="@*"> 
       <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute> 
     </xsl:for-each> 
     <xsl:attribute name="initial-page-number"> 
      <xsl:value-of select="1"/> 
     </xsl:attribute> 
     <xsl:copy> 
      <xsl:apply-templates select="child::*"/> 
     </xsl:copy> 
    </xsl:element> 
</xsl:when> 
</xsl:choose> 
</xsl:template> 



<xsl:template match='comment()'> 
<xsl:comment><xsl:value-of select="."/></xsl:comment> 
</xsl:template> 


<xsl:template match="@*|*"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
</xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

ответ

0

Ваша таблица стилей создает fo:page-sequence с помощью <xsl:element name="fo:page-sequence">, и еще один с <xsl:copy> (как согласующий элемент является fo:page-sequence).

Просто удалите xsl:copy (но оставьте <xsl:apply-templates select="child::*"/>, так как вы хотите обработать дочерние элементы текущего узла!), И вы должны получить то, что вам нужно.

0

Ваша таблица стилей изменяется каждый fo:page-sequence, потому что предикат ['alternating'] всегда прав.

Вы можете проверить значение master-reference в шаблоне поиска, а также вы можете просто скопировать существующие атрибуты, и вы можете скопировать содержимое fo:page-sequence, так как он не будет содержать другой fo:page-sequence:

<xsl:template 
     match="ss:split/fo:page-sequence[@master-reference = 'alternating']"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 
     <xsl:attribute name="initial-page-number">1</xsl:attribute> 
     <xsl:copy-of select="node()" /> 
    </xsl:copy> 
</xsl:template> 
+0

Спасибо , он работает сейчас! – robyp7

+0

Тогда не стесняйтесь «принять» ответ. –

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