gpt4 book ai didi

xml - 如何以 HTML 表格格式显示此 XML 数据..?

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:04 27 4
gpt4 key购买 nike

下面是我的 XML 文件 -

<School>
<Std c="8">
<Name>ABC</Name>
<Age>12</Age>
<Name>EFG</Name>
<Age>11</Age>
<Name>PQR</Name>
<Age>12</Age>
<Name>XYZ</Name>
<Age>11</Age>
</Std>
</School>

我希望 HTML 输出为 -

Name    Age
ABC 12
EFG 11
PQR 12
XYZ 11

最佳答案

这是一个完全通用的解决方案,适用于任意数量的列:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="kColsByName" match="Std/*"
use="name()"/>

<xsl:variable name="vCols" select=
"*/*/*
[generate-id()
=
generate-id(key('kColsByName', name())[1])
]
"/>

<xsl:variable name="vNumCols" select="count($vCols)"/>

<xsl:template match="/*/Std">
<table>
<tr>
<xsl:apply-templates select="$vCols"
mode="head"/>
</tr>
<xsl:apply-templates select=
"*[position() mod $vNumCols = 1]"/>
</table>
</xsl:template>

<xsl:template match="Std/*" mode="head">
<th><xsl:value-of select="name()"/></th>
</xsl:template>

<xsl:template match="Std/*">
<tr>
<xsl:apply-templates mode="inrow" select=
"(. | following-sibling::*)
[not(position() > $vNumCols)]"/>
</tr>
</xsl:template>

<xsl:template match="Std/*" mode="inrow">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<School>
<Std c="8">
<Name>ABC</Name>
<Age>12</Age>
<Name>EFG</Name>
<Age>11</Age>
<Name>PQR</Name>
<Age>12</Age>
<Name>XYZ</Name>
<Age>11</Age>
</Std>
</School>

产生了想要的、正确的结果:

<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>ABC</td>
<td>12</td>
</tr>
<tr>
<td>EFG</td>
<td>11</td>
</tr>
<tr>
<td>PQR</td>
<td>12</td>
</tr>
<tr>
<td>XYZ</td>
<td>11</td>
</tr>
</table>

现在,如果我们向原始 XML 文档添加一个新列,比如 Sex:

<School>
<Std c="8">
<Name>ABC</Name>
<Age>12</Age>
<Sex>M</Sex>
<Name>EFG</Name>
<Age>11</Age>
<Sex>F</Sex>
<Name>PQR</Name>
<Age>12</Age>
<Sex>F</Sex>
<Name>XYZ</Name>
<Age>11</Age>
<Sex>M</Sex>
</Std>
</School>

我们可以在不做任何修改的情况下应用上面相同的转换,它再次产生正确的结果——这表明该转换是真正通用的:

<table>
<tr>
<th>Name</th>
<th>Age</th>
<th>Sex</th>
</tr>
<tr>
<td>ABC</td>
<td>12</td>
<td>M</td>
</tr>
<tr>
<td>EFG</td>
<td>11</td>
<td>F</td>
</tr>
<tr>
<td>PQR</td>
<td>12</td>
<td>F</td>
</tr>
<tr>
<td>XYZ</td>
<td>11</td>
<td>M</td>
</tr>
</table>

关于xml - 如何以 HTML 表格格式显示此 XML 数据..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com