gpt4 book ai didi

xml - 为什么我的 XSLT 样式表没有从我的 XML 文件中提取表的值?

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

老实说,这是我的第一个 XML 项目,但我终于厌倦了自己查找答案。我试图创建一个地址簿,将联系人数据保存在一个 XML 文件中,并从转换后的 XSLT 样式表中提取以生成一个简单的表格。这是我的文件的副本,将不胜感激。谢谢。

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="contactdata.xsl"?>

<!DOCTYPE addressbook [
<!ELEMENT addressbook (contact)>
<!ELEMENT contact (fname,lname,mi,staddress,city,state,zip,phone,email,twitter)>
<!ELEMENT fname (#PCDATA)>
<!ELEMENT lname (#PCDATA)>
<!ELEMENT mi (#PCDATA)>
<!ELEMENT staddress (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT twitter (#PCDATA)>
]>

<addressbook>
<contact>
<fname>Peyton</fname>
<lname>Manning</lname>
<mi>Z</mi>
<staddress>123 Go Vols</staddress>
<city>Denver</city>
<state>CO</state>
<zip>12345</zip>
<phone>1-800-youwish</phone>
<email>pmanning@broncos.com</email>
<twitter>peyton_manning</twitter>
</contact>

<contact>
<fname>Eric</fname>
<lname>Berry</lname>
<mi>P</mi>
<staddress>123 Arrowhead Stadium</staddress>
<city>Kansas City</city>
<state>MO</state>
<zip>34567</zip>
<phone>816-213-4452</phone>
<email>eberry@chiefs.com</email>
<twitter>eric_berry</twitter>
</contact>
</addressbook>

和我的 XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="sitetemplate.css"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Middle Initial</th>
<th>Street Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th>Phone</th>
<th>Email</th>
<th>Twitter</th>
</tr>
<xsl:for-each select="addressbook/contact">
<tr>
<td><xsl:value-of select="fname"/></td>
<td><xsl:value-of select="lname"/></td>
<td><xsl:value-of select="mi"/></td>
<td><xsl:value-of select="staddress"/></td>
<td><xsl:value-of select="city"/></td>
<td><xsl:value-of select="state"/></td>
<td><xsl:value-of select="zip"/></td>
<td><xsl:value-of select="phone"/></td>
<td><xsl:value-of select="email"/></td>
<td><xsl:value-of select="twitter"/></td>

</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

我还想提一提代码是如何编写的,因为我的第一行已经生成,但我的表随后就停止了。

最佳答案

I'd like to mention that as of how the code is written now that my first row is produced, but my table just stops afterwards

没有。所提供的转换工作正常,并为每个 contact 元素生成一个 tr -- 正如预期的那样

然而,想要的转换可以用更短的方式表达:

<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:template match="/*">
<html>
<body>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Middle Initial</th>
<th>Street Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th>Phone</th>
<th>Email</th>
<th>Twitter</th>
</tr>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="contact">
<tr><xsl:apply-templates/></tr>
</xsl:template>

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

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

<addressbook>
<contact>
<fname>Peyton</fname>
<lname>Manning</lname>
<mi>Z</mi>
<staddress>123 Go Vols</staddress>
<city>Denver</city>
<state>CO</state>
<zip>12345</zip>
<phone>1-800-youwish</phone>
<email>pmanning@broncos.com</email>
<twitter>peyton_manning</twitter>
</contact>
<contact>
<fname>Eric</fname>
<lname>Berry</lname>
<mi>P</mi>
<staddress>123 Arrowhead Stadium</staddress>
<city>Kansas City</city>
<state>MO</state>
<zip>34567</zip>
<phone>816-213-4452</phone>
<email>eberry@chiefs.com</email>
<twitter>eric_berry</twitter>
</contact>
</addressbook>

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

<html>
<body>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Middle Initial</th>
<th>Street Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th>Phone</th>
<th>Email</th>
<th>Twitter</th>
</tr>
<tr>
<td>Peyton</td>
<td>Manning</td>
<td>Z</td>
<td>123 Go Vols</td>
<td>Denver</td>
<td>CO</td>
<td>12345</td>
<td>1-800-youwish</td>
<td>pmanning@broncos.com</td>
<td>peyton_manning</td>
</tr>
<tr>
<td>Eric</td>
<td>Berry</td>
<td>P</td>
<td>123 Arrowhead Stadium</td>
<td>Kansas City</td>
<td>MO</td>
<td>34567</td>
<td>816-213-4452</td>
<td>eberry@chiefs.com</td>
<td>eric_berry</td>
</tr>
</table>
</body>
</html>

解释:

正确使用模板、模式匹配和 XSLT 处理模型。

关于xml - 为什么我的 XSLT 样式表没有从我的 XML 文件中提取表的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443806/

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