由于 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 来品尝。