【发布时间】:2011-12-06 19:31:42
【问题描述】:
我有一个 XML 文件,我正在使用 XSL 将其转换为 html 页面。我想遍历包含许多父节点的 XML 文件,然后遍历子节点并将结果显示在 HTML 表中。
到目前为止,我能够遍历父节点并成功返回它们,但是当我在其中嵌套一个 for-each 循环以返回子节点的属性时,我最终会返回文档中所有子节点的属性,而不是特定于父节点的属性。
任何人都可以对此有所了解。
XML:
<AdminReports xmlns="30/11/2011 09:25:58">
<AdminReport ID="1">
<DataSourceInformation DataSourceID="12" Value="DSI_50"/>
</AdminReport>
<AdminReport ID="2">
<DataSourceInformation DataSourceID="23" Value="DSI_30"/>
</AdminReport>
<AdminReport ID="3">
<DataSourceInformation DataSourceID="34" Value="DSI_20"/>
</AdminReport>
</AdminReports>
XSL:
<table border="1" cellspacing="2" width="800" bgcolor="white">
<xsl:for-each select="/*/*[name()='AdminReport']">
<tr bgcolor="9acd32">
<table><th>Admin Report Num:</th></table>
<table><th><xsl:value-ofselect="@ID"/> </th></table>
</tr>
<tr>
<xsl:for-each select="/*/*/*[name()='DataSourceInformation']">
<table><th>Data Report ID:</th></table>
<table><th><xsl:value-of select="@DataSourceID"/></th></table>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
【问题讨论】:
-
为什么
<table><th> **** </th></table>被写了这么多次? -
这是一个奇怪的命名空间。命名空间的 XML 规则非常模糊。一些工具/解析器可能会让你侥幸逃脱,但迟早你会找到一个不会的。