由于 xml 结构有问题但我不想更改,如何使用 xsl 检索所有分区?
how to use xsl to retrieve all the district because the xml structure have some problem but i dont want to change?
如何从 xml 文件中 select 所有分区?当我读取分区时它 returns 只有第一行?
预期输出:
XML 输入:
<?xml version="1.0"?>
<!DOCTYPE states SYSTEM "states.dtd">
<states>
<state sID="1">
<statename>Perak</statename>
<disctrict>Setiawan</disctrict>
<disctrict>Ipoh</disctrict>
<disctrict>Kampar</disctrict>
</state>
<state sID="2">
<statename>Selangor</statename>
<disctrict>Petaling</disctrict>
<disctrict>Setapak</disctrict>
<disctrict>Cheras</disctrict>
<disctrict>Rawang</disctrict>
</state>
<state sID="3">
<statename>Penang</statename>
<disctrict>Balik Pulau</disctrict>
<disctrict>Bayan Lepas</disctrict>
</state>
</states>
下面是 xsl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="10" width="20%" bgcolor="blue">
<tr bgcolor="yellow" >
<th>---States---</th>
</tr>
<xsl:for-each select="states/state">
<tr>
<td><xsl:value-of select="disctrict"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
i want a separate td for each district
您显示的结果(您应该 作为代码 而不是作为 link 发布到图片)没有单独的 td
对于每个地区。它把所有的区放在同一个 td
中,只用换行符分隔。
要得到这样的结果,你可以简单地做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/states">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="1">
<!-- head -->
<tr>
<th>State</th>
<th>Districts</th>
</tr>
<!-- body -->
<xsl:for-each select="state">
<tr>
<td>
<xsl:value-of select="statename"/>
</td>
<td>
<xsl:for-each select="disctrict">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
或者,您可以为每个地区创建一个单独的 tr
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/states">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="1">
<!-- head -->
<tr>
<th>State</th>
<th>Districts</th>
</tr>
<!-- body -->
<xsl:for-each select="state">
<tr>
<td rowspan="{count(disctrict)}">
<xsl:value-of select="statename"/>
</td>
<td>
<xsl:value-of select="disctrict[1]"/>
</td>
</tr>
<xsl:for-each select="disctrict[position() > 1]">
<tr>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
此处的结果类似于:
添加您自己的 CSS 来品尝。
如何从 xml 文件中 select 所有分区?当我读取分区时它 returns 只有第一行?
预期输出:
XML 输入:
<?xml version="1.0"?>
<!DOCTYPE states SYSTEM "states.dtd">
<states>
<state sID="1">
<statename>Perak</statename>
<disctrict>Setiawan</disctrict>
<disctrict>Ipoh</disctrict>
<disctrict>Kampar</disctrict>
</state>
<state sID="2">
<statename>Selangor</statename>
<disctrict>Petaling</disctrict>
<disctrict>Setapak</disctrict>
<disctrict>Cheras</disctrict>
<disctrict>Rawang</disctrict>
</state>
<state sID="3">
<statename>Penang</statename>
<disctrict>Balik Pulau</disctrict>
<disctrict>Bayan Lepas</disctrict>
</state>
</states>
下面是 xsl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="10" width="20%" bgcolor="blue">
<tr bgcolor="yellow" >
<th>---States---</th>
</tr>
<xsl:for-each select="states/state">
<tr>
<td><xsl:value-of select="disctrict"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
i want a separate td for each district
您显示的结果(您应该 作为代码 而不是作为 link 发布到图片)没有单独的 td
对于每个地区。它把所有的区放在同一个 td
中,只用换行符分隔。
要得到这样的结果,你可以简单地做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/states">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="1">
<!-- head -->
<tr>
<th>State</th>
<th>Districts</th>
</tr>
<!-- body -->
<xsl:for-each select="state">
<tr>
<td>
<xsl:value-of select="statename"/>
</td>
<td>
<xsl:for-each select="disctrict">
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
或者,您可以为每个地区创建一个单独的 tr
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/states">
<html>
<body>
<h2>Kawan Food Company Delivery States</h2>
<table border="1">
<!-- head -->
<tr>
<th>State</th>
<th>Districts</th>
</tr>
<!-- body -->
<xsl:for-each select="state">
<tr>
<td rowspan="{count(disctrict)}">
<xsl:value-of select="statename"/>
</td>
<td>
<xsl:value-of select="disctrict[1]"/>
</td>
</tr>
<xsl:for-each select="disctrict[position() > 1]">
<tr>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
此处的结果类似于:
添加您自己的 CSS 来品尝。