1

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

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

谢谢维托

4

2 回答 2

1

不明白你的意思。如果您想创建一个 XSLT 复制所有内容但只调整 div id='navigation' 内的“a”元素,您应该执行以下操作:

<?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>
于 2012-08-28T15:38:36.183 回答
1

下面演示为每个标签添加一个属性(在这种情况下target),这些a标签是具有 id 的元素下的子元素navigation(因此对应#navigation于 CSS 中)。保留原始标签中的所有内容和其他属性(尽管顺序可能不是 - 尽管这不应该成为问题)。

<?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标签,请使用附加条件相应地调整条件。将在所有标准重氮规则之后执行,因此如果您碰巧更改了结果文档中标签位置的结构,xsl:template请确保相应地调整条件。matcha

这是在http://docs.diazo.org/en/latest/recipes/adding-an-attribute/index.html官方 Diazo 文档中扩展的示例

于 2013-02-04T04:27:26.117 回答