我想插入例如主题的给定部分中的#content-core
并在#content-core
如果我们使用以下方案A规则,a
下的#content-core
元素将按预期替换:
情景A
<replace css:theme="#target_id" css:content="#content-core" />
<xsl:template match="a">REPLACED_LINK</xsl:template>
此方案A不是我需要的。我需要一个使用xsl指令插入元素的场景。
当我使用xsl指令插入元素时,如下所示,a
下的#content-core
元素将不会被替换。为什么呢?
情景B
<replace css:theme-children="#target_id">
<xsl:copy-of css:select="#content-core"/>
</replace>
<xsl:template match="a">REPLACED_LINK</xsl:template>
如果<xsl:apply-templates />
指令也按建议使用,则生成的主题将包含两个插入的#content-core
元素:在第一个元素中,a
元素将不会被替换,并且第二,他们将被取代。
情景C
<replace css:theme-children="#target_id">
<xsl:copy-of css:select="#content-core"/>
<xsl:apply-templates /> <!-- as suggested by SteveM, see answers -->
</replace>
<xsl:template match="a">REPLACED_LINK</xsl:template>
我正在使用的文件
我在这里复制了我正在使用的文件rules.xml
和index.html
。
<?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">
<theme href="index.html" />
<!--replace css:theme="#target_id" css:content="#content-core" /-->
<replace css:theme-children="#target_id">
<xsl:copy-of css:select="#content-core"/>
<xsl:apply-templates /> <!-- as suggested by SteveM, see answers -->
</replace>
<xsl:template match="a">REPLACED_LINK</xsl:template>
</rules>
<!DOCTYPE html>
<html>
<head></head>
<body><div id="target_id"/></body>
</html>
一些可能有用的提示
试图理解为什么这不起作用,因为我预期我一直在调试重氮rules.py
和compiler.py
,我发现compiled_doc
返回的compiler.compile_theme(...)
不同如下:
compiled_doc
:
<xsl:apply-templates select="//*[@id = 'content-core']"/>
方案B的 compiled_doc
:
<xsl:copy-of css:select="#content-core" select="descendant-or-self::*[@id = 'content-core']"/>
<xsl:apply-templates/>
在apply_rules(...)
rules.py
rules_doc
之后,5c5,8
< <xsl:apply-templates xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dyn="http://exslt.org/dynamic" xmlns:esi="http://www.edge-delivery.org/esi/1.0" xmlns:exsl="http://exslt.org/common" xmlns:str="http://exslt.org/strings" select="//*[@id = 'content-core']"></xsl:apply-templates>
---
>
> <xsl:copy-of xmlns:xsl="http://www.w3.org/1999/XSL/Transform" css:select="#content-core" select="descendant-or-self::*[@id = 'content-core']"></xsl:copy-of>
> <xsl:apply-templates xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:apply-templates>
>
8,9c11,14
<
< <diazo:replace css:theme="#target_id" css:content="#content-core" xml:id="r2" theme="descendant-or-self::*[@id = 'target_id']" content="//*[@id = 'content-core']"><diazo:synthetic xmlns:dyn="http://exslt.org/dynamic" xmlns:esi="http://www.edge-delivery.org/esi/1.0" xmlns:exsl="http://exslt.org/common" xmlns:str="http://exslt.org/strings"><xsl:apply-templates xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="//*[@id = 'content-core']"></xsl:apply-templates></diazo:synthetic><diazo:matches><diazo:xmlid themeid="r1">idm16926224-index.html</diazo:xmlid></diazo:matches></diazo:replace>
---
> <diazo:replace css:theme="#target_id" xml:id="r2" theme="descendant-or-self::*[@id = 'target_id']"><diazo:synthetic>
> <xsl:copy-of xmlns:xsl="http://www.w3.org/1999/XSL/Transform" css:select="#content-core" select="descendant-or-self::*[@id = 'content-core']"></xsl:copy-of>
> <xsl:apply-templates xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:apply-templates>
> </diazo:synthetic><diazo:matches><diazo:xmlid themeid="r1">idm16375952-index.html</diazo:xmlid></diazo:matches></diazo:replace>
之间的差异(方案A和B)如下:
{{1}}