如何区分 XSL 中的两个模板?

发布于 2024-11-09 05:03:16 字数 453 浏览 0 评论 0原文

这就是我在 XSL 中尝试做的事情:

<xsl:apply-templates select="document('a.xml')//row"/>
<xsl:apply-templates select="document('b.xml')//row"/>

<xsl:template match="row">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row">
  <!-- for document b.xml -->
</xsl:template>

由于显而易见的原因,它不能按现在的方式工作。如何区分这两个模板?文档a.xmlb.xml 在XML 结构方面完全相同。

This is what I'm trying to do in XSL:

<xsl:apply-templates select="document('a.xml')//row"/>
<xsl:apply-templates select="document('b.xml')//row"/>

<xsl:template match="row">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row">
  <!-- for document b.xml -->
</xsl:template>

Doesn't work as is now, for obvious reasons. How can I differentiate these two templates? Document a.xml and b.xml are absolutely identical in terms of XML structure.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

2024-11-16 05:03:16

使用 mode 属性

<xsl:apply-templates select="document('a.xml')//row" mode="a"/>
<xsl:apply-templates select="document('b.xml')//row" mode="b"/>

<xsl:template match="row" mode="a">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row" mode="b">
  <!-- for document b.xml -->
</xsl:template>

Use the mode attribute.

<xsl:apply-templates select="document('a.xml')//row" mode="a"/>
<xsl:apply-templates select="document('b.xml')//row" mode="b"/>

<xsl:template match="row" mode="a">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row" mode="b">
  <!-- for document b.xml -->
</xsl:template>
慢慢从新开始 2024-11-16 05:03:16

您可以按照建议使用 mode 属性,但这确实意味着该决定部分是在 xsl:apply-templates 级别做出的,部分是由模板规则本身做出的。如果您希望控件纯粹在模板规则中,则可以使用匹配模式

row[(/) is document('a.xml')]
row[(/) is document('b.xml')]

(如果您仍在使用 XSLT 1.0,请将“A is B”替换为“generate-id” (A) = 生成 ID(B)")

You can use the mode attribute as suggested, though this does mean that the decision is made partly at the xsl:apply-templates level and partly by the template rule itself. If you want the control to be purely in the template rule, you could use the match patterns

row[(/) is document('a.xml')]
row[(/) is document('b.xml')]

(If you're still using XSLT 1.0, replace "A is B" by "generate-id(A) = generate-id(B)")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文