我需要即时修改特定 div (#navigation) 中存在的所有“a”标签的“内容”。
是否有重氮规则或 xslt 模式?
谢谢维托
不明白你的意思。如果您想创建一个 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>
下面演示为每个标签添加一个属性(在这种情况下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
请确保相应地调整条件。match
a
这是在http://docs.diazo.org/en/latest/recipes/adding-an-attribute/index.html官方 Diazo 文档中扩展的示例