使用 XSL:Key 查找特定的后代节点
给出以下代码:
<database>
<table name="table1">
<column name="id"/>
<column name="created_at"/>
</table>
<table name="table2">
<column name="id"/>
<column name="updated_at"/>
</table>
</database>
我希望能够使用 xsl:key 测试特定表是否按名称具有特定列。例如,我想知道表是否有“created_at”列,以便我可以在转换中编写特定的代码。
我已经获得了一个通用密钥,可以测试任何表是否具有按名称指定的列,但尚未弄清楚如何使其特定于转换当前正在使用的表。
<xsl:key name="columnTest" match="column" use="@name"/>
<xsl:for-each select="database/table">
<xsl:choose>
<xsl:when test="key('columnTest', 'created_at')">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
所以我最终得到所有表格的“true”。任何指导将不胜感激。
Given the following code:
<database>
<table name="table1">
<column name="id"/>
<column name="created_at"/>
</table>
<table name="table2">
<column name="id"/>
<column name="updated_at"/>
</table>
</database>
I want to be able to test using an xsl:key if specific table has a specific column by name. For instance, I want to know if a table has a 'created_at' column so I can write specific code within the transformation.
I've gotten a general key that will test if any table has a given column by name, but have not figured out how to make it specific to the table the transformation is currently working with.
<xsl:key name="columnTest" match="column" use="@name"/>
<xsl:for-each select="database/table">
<xsl:choose>
<xsl:when test="key('columnTest', 'created_at')">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
So I end up with 'true' for all the tables. Any guidance would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
以下转换显示了如何完成此操作:
当将此转换应用于提供的 XML 文档时,将生成所需的正确结果:
The following transformation shows how this can be done:
When this transformation is applied on the provided XML document, the wanted, correct result is produced: