生成文档后添加元素
Posted
技术标签:
【中文标题】生成文档后添加元素【英文标题】:Add element after document has been produced 【发布时间】:2021-10-29 08:49:44 【问题描述】:使用 XSLT 创建 Xhtml 文档后,我需要添加一个元素 (link:schemaRef)。
原因是我正在合并 2 个 XHTML 文档,并且只有合并的文档应该包含我需要添加的元素。我缩短了链接的长度只是为了更好地适应示例。
我看不到结果文件有添加的链接。 我的代码明显有问题?
我的代码库:
<!-- Identity transform -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Find and add element in document -->
<xsl:template match="/xhtml:html/xhtml:body/xhtml:div[1]/ix:header/ix:hidden/ix:references">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:element name="link:schemaRef">
<xsl:attribute name="xlink:type">simple</xsl:attribute>
<xsl:attribute name="xlink:href">http://example.org</xsl:attribute>
</xsl:element>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
【问题讨论】:
您还需要显示两个最小输入样本,以及您获得的输出和您想要的输出。 我想你还需要解释一下“文档生成后”是什么意思,你是否以及如何运行两个转换。 感谢您的回答,我会更新问题但无法立即完成。 【参考方案1】:您还没有解释输入的外观,但是如果您想在一个样式表中执行两个转换,那么您可以使用模式将它们分开,并将第一个转换步骤的结果存储在您推送到第二个模式的变量中:
<xsl:mode name="m1" on-no-match="shallow-copy"/>
<xsl:variable name="intermediary-result">
<xsl:apply-templates mode="m1"/>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="$intermediary-result" mode="m2"/>
</xsl:template>
<xsl:mode name="m2" on-no-match="shallow-copy"/>
<xsl:template mode="m2" match="/xhtml:html/xhtml:body/xhtml:div[1]/ix:header/ix:hidden/ix:references">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:element name="link:schemaRef">
<xsl:attribute name="xlink:type">simple</xsl:attribute>
<xsl:attribute name="xlink:href">http://example.org</xsl:attribute>
</xsl:element>
<xsl:apply-templates mode="#current"/>
</xsl:copy>
</xsl:template>
【讨论】:
以上是关于生成文档后添加元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 innerHtml 添加的元素不受 Javascript 库影响
Jquery怎么选择用append添加的元素。我用append添加了一个a标签,添加后用$("a")选择不了。在线等,急。