将属性即时插入“a”标记

时间:2012-08-28 14:53:57

标签: xslt diazo

我需要即时修改特定div中存在的所有“a”标签的“内容”(#navigation)。

是否有重氮规则或xslt模式?

感谢的 维托

2 个答案:

答案 0 :(得分:1)

不确定你的意思。 如果你想创建一个复制所有内容但只调整div id ='navigation'中的“a”元素的XSLT,你应该这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />

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

<xsl:template match="//div[@id='navigation']//a">
   <a>
       <xsl:attribute name='href'>
           <xsl:value-of select='@href' />
       </xsl:attribute>
       <!-- Change your content here -->
   </a>
</xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

以下演示了向属性为target的元素下的每个a标记添加属性(在本例中为navigation)(因此对应于{ CSS中的{1}}。保留原始标签中的所有内容和其他属性(尽管顺序可能不是 - 尽管这不应该是一个问题)。

#navigation

如果要匹配特定的<?xml version="1.0" encoding="UTF-8"?> <rules xmlns="http://namespaces.plone.org/diazo" xmlns:css="http://namespaces.plone.org/diazo/css" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <after css:theme="#target" css:content="#navigation" /> <xsl:template match="*[@id='navigation']//a"> <xsl:copy> <xsl:attribute name="target">_blank</xsl:attribute> <xsl:copy-of select="@*" /> <xsl:apply-templates /> </xsl:copy> </xsl:template> </rules> 标记,请使用其他条件相应地调整match条件。 a将在所有标准Diazo规则之后执行,因此如果您碰巧更改了xsl:template标记在结果文档中的位置结构,请确保相应地调整match条件。

这是在http://docs.diazo.org/en/latest/recipes/adding-an-attribute/index.html

的官方Diazo文档中扩展的一个例子