如何分开IDREF并显示其父元素的属性值?
假设我有一个用DTD声明的XML文件,例如:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE box SYSTEM "box.dtd">
<box>
<title>My Powerful BOX</title>
<tape_list>
<tape tid="tr_1" name="tp_2000"/>
<tape tid="tr_2" name="tp_20230"/>
<tape tid="tr_3" name="tp_200412"/>
<tape tid="tr_4" name="tp_202530341"/>
<tape tid="tr_5" name="tp_20320"/>
<tape tid="tr_6" name="tp_202340"/>
<tape tid="tr_7" name="tp_20253"/>
<tape tid="tr_8" name="tp_202613"/>
<tape tid="tr_9" name="tp_20234"/>
<tape tid="tr_10" name="tp_234000"/>
<tape tid="tr_11" name="tp_202500"/>
<tape tid="tr_12" name="tp_201200"/>
</tape_list>
<item_list>
<item item_id="No_1">
<item_info item_name="MY_item_NAME"/>
<tapes ref_id="tr_10 tr_11 tr_4"/>
</item>
<item item_id="No_2">
<item_info item_name="MY_item_NAME2"/>
<tapes ref_id="tr_2"/>
</item>
</item_list>
</box>
我正在制作XSL来显示Item_list中的项目表。我想从tape_list/tape/@name中显示item_list/item/tapes名称,但请记住,ref_id type是idref,tid是唯一的ID。类似的内容:
<--Outside of xsl:template-->
<xsl:key name="tape" match="tape_list/tape" use="@tid"/>
<--------------------------->
<table border="1">
<xsl:for-each select="box/item_list/item">
<tr bgcolor="#9acd32">
<th>title</th>
<th>used tapes</th>
</tr>
<tr>
<td>
<xsl:value-of select="./item_info/@item_name"/>
</td>
<td>
<xsl:for-each select="key('tape', tapes/@ref_id)">
<xsl:value-of select="@name"/>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
但是,这仅返回针对项目NO_2的信息,并且对于NO_1返回什么都没有返回。我的问题是为什么会发生这种情况以及如何显示相应ID的名称?
PS:我正在使用XSL版本2.0
Let's say I have a XML file declared with a dtd, for example:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE box SYSTEM "box.dtd">
<box>
<title>My Powerful BOX</title>
<tape_list>
<tape tid="tr_1" name="tp_2000"/>
<tape tid="tr_2" name="tp_20230"/>
<tape tid="tr_3" name="tp_200412"/>
<tape tid="tr_4" name="tp_202530341"/>
<tape tid="tr_5" name="tp_20320"/>
<tape tid="tr_6" name="tp_202340"/>
<tape tid="tr_7" name="tp_20253"/>
<tape tid="tr_8" name="tp_202613"/>
<tape tid="tr_9" name="tp_20234"/>
<tape tid="tr_10" name="tp_234000"/>
<tape tid="tr_11" name="tp_202500"/>
<tape tid="tr_12" name="tp_201200"/>
</tape_list>
<item_list>
<item item_id="No_1">
<item_info item_name="MY_item_NAME"/>
<tapes ref_id="tr_10 tr_11 tr_4"/>
</item>
<item item_id="No_2">
<item_info item_name="MY_item_NAME2"/>
<tapes ref_id="tr_2"/>
</item>
</item_list>
</box>
And I'm making a xsl to show a table of items from item_list. I want to show the item_list/item/tapes name from tape_list/tape/@name, but keep in mind that ref_id type is IDREF and tid is unique ID. Something like that:
<--Outside of xsl:template-->
<xsl:key name="tape" match="tape_list/tape" use="@tid"/>
<--------------------------->
<table border="1">
<xsl:for-each select="box/item_list/item">
<tr bgcolor="#9acd32">
<th>title</th>
<th>used tapes</th>
</tr>
<tr>
<td>
<xsl:value-of select="./item_info/@item_name"/>
</td>
<td>
<xsl:for-each select="key('tape', tapes/@ref_id)">
<xsl:value-of select="@name"/>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
But this returns info only for item NO_2 and returns nothing for NO_1. My question is why is this happening and how I can show the name for the corresponding id?
P.S: I'm using xsl version 2.0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您没有发布预期的结果。我猜您想做以下操作:
XSLT 2.0
鉴于您的输入,这将产生:
结果
渲染
You did not post the expected result. I am guessing you want to do something like:
XSLT 2.0
Given your input, this will produce:
Result
Rendered