生成文档后添加元素

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>

【讨论】:

以上是关于生成文档后添加元素的主要内容,如果未能解决你的问题,请参考以下文章

使用谷歌应用程序脚本以编程方式将脚注添加到谷歌文档中

问题将元素添加到列表

将 jQuery 验证规则添加到动态生成的表单元素时出错

使用 innerHtml 添加的元素不受 Javascript 库影响

jQuery如何向HTML添加指定的内容

Jquery怎么选择用append添加的元素。我用append添加了一个a标签,添加后用$("a")选择不了。在线等,急。