在 XSLT 文件中使用子元素?
Use sub-elements inside XSLT file?
我遇到了麻烦。首先,如果我使用的词不正确,我深表歉意,我对 XML 很陌生。
在我的作业中,我被要求创建 DTD、XML 和 XSLT 文件。我已完成 DTD 和 XML 文件,正在处理 XSLT 文件。一切正常,我只是不知道如何访问其他元素中的元素。这是代码,这样会更容易解释。
XML; (仅举一部分)
<entry id='c01'>
<MetaTags>Business</MetaTags>
<title><brand>HP Pavilion</brand><name>550-112NA</name></title>
<Description>While other towers have been standing still, HP has revolutionized the category. From magnified performance and reliability, to its stylish redesign, this HP Pavilion is the best thing to happen to towers in over 20 years.</Description>
<Price>€579</Price>
<Image src="Image1.jpg"/>
<Specs>
<CPU>A10-8750 APU</CPU>
<GPU>Radeon R7</GPU>
<RAM>8 GB DDR3</RAM>
<Storage><HDD> 2TB </HDD></Storage>
<OS>Windows 10</OS>
<optional>
<Monitor>LG 22" Full HD TV</Monitor>
<Keyboard>Microsoft Wired Keyboard 600</Keyboard>
<Mouse>Logitech M705 Mouse</Mouse>
</optional>
</Specs>
</entry>
XSLT;
<?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>
<head>
<title>Computer Shop</title>
</head>
<body>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Image</th>
<th style="text-align:left">MetaTags</th>
<th style="text-align:left">Brand</th>
<th style="text-align:left">Name</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Price</th>
<th style="text-align:left">CPU</th>
<th style="text-align:left">GPU</th>
<th style="text-align:left">RAM</th>
<th style="text-align:left">HDD</th>
<th style="text-align:left">SSD</th>
<th style="text-align:left">OS</th>
<th style="text-align:left">Monitor</th>
<th style="text-align:left">Keyboard</th>
<th style="text-align:left">Mouse</th>
</tr>
<xsl:for-each select="ComputerShop/entry">
<tr>
<td>
<xsl:value-of select="Image"/>
</td>
<td>
<xsl:value-of select="MetaTags"/>
</td>
<td>
<xsl:value-of select="brand"/>
</td>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="Description"/>
</td>
<td>
<xsl:value-of select="Price"/>
</td>
<td>
<xsl:value-of select="RAM"/>
</td>
<td>
<xsl:value-of select="RAM"/>
</td>
<td>
<xsl:value-of select="HDD"/>
</td>
<td>
<xsl:value-of select="SSD"/>
</td>
<td>
<xsl:value-of select="OS"/>
</td>
<td>
<xsl:value-of select="Monitor"/>
</td>
<td>
<xsl:value-of select="Keyboard"/>
</td>
<td>
<xsl:value-of select="Mouse"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
所有这些创建了一个看起来像这样的东西;
如您所见,另一个元素内的任何 XML 元素都不会出现在 table 内。我想要任何有关如何解决此问题的帮助。谢谢。
您可以在 select
属性中指定元素的路径。
而不是这样做....
<xsl:value-of select="RAM"/>
你应该这样做,因为 RAM
在 Specs
元素下面
<xsl:value-of select="Specs/RAM"/>
同理,获取Monitor,例如,这样做
<xsl:value-of select="Specs/optional/Monitor"/>
我遇到了麻烦。首先,如果我使用的词不正确,我深表歉意,我对 XML 很陌生。
在我的作业中,我被要求创建 DTD、XML 和 XSLT 文件。我已完成 DTD 和 XML 文件,正在处理 XSLT 文件。一切正常,我只是不知道如何访问其他元素中的元素。这是代码,这样会更容易解释。
XML; (仅举一部分)
<entry id='c01'>
<MetaTags>Business</MetaTags>
<title><brand>HP Pavilion</brand><name>550-112NA</name></title>
<Description>While other towers have been standing still, HP has revolutionized the category. From magnified performance and reliability, to its stylish redesign, this HP Pavilion is the best thing to happen to towers in over 20 years.</Description>
<Price>€579</Price>
<Image src="Image1.jpg"/>
<Specs>
<CPU>A10-8750 APU</CPU>
<GPU>Radeon R7</GPU>
<RAM>8 GB DDR3</RAM>
<Storage><HDD> 2TB </HDD></Storage>
<OS>Windows 10</OS>
<optional>
<Monitor>LG 22" Full HD TV</Monitor>
<Keyboard>Microsoft Wired Keyboard 600</Keyboard>
<Mouse>Logitech M705 Mouse</Mouse>
</optional>
</Specs>
</entry>
XSLT;
<?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>
<head>
<title>Computer Shop</title>
</head>
<body>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Image</th>
<th style="text-align:left">MetaTags</th>
<th style="text-align:left">Brand</th>
<th style="text-align:left">Name</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Price</th>
<th style="text-align:left">CPU</th>
<th style="text-align:left">GPU</th>
<th style="text-align:left">RAM</th>
<th style="text-align:left">HDD</th>
<th style="text-align:left">SSD</th>
<th style="text-align:left">OS</th>
<th style="text-align:left">Monitor</th>
<th style="text-align:left">Keyboard</th>
<th style="text-align:left">Mouse</th>
</tr>
<xsl:for-each select="ComputerShop/entry">
<tr>
<td>
<xsl:value-of select="Image"/>
</td>
<td>
<xsl:value-of select="MetaTags"/>
</td>
<td>
<xsl:value-of select="brand"/>
</td>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="Description"/>
</td>
<td>
<xsl:value-of select="Price"/>
</td>
<td>
<xsl:value-of select="RAM"/>
</td>
<td>
<xsl:value-of select="RAM"/>
</td>
<td>
<xsl:value-of select="HDD"/>
</td>
<td>
<xsl:value-of select="SSD"/>
</td>
<td>
<xsl:value-of select="OS"/>
</td>
<td>
<xsl:value-of select="Monitor"/>
</td>
<td>
<xsl:value-of select="Keyboard"/>
</td>
<td>
<xsl:value-of select="Mouse"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
所有这些创建了一个看起来像这样的东西;
如您所见,另一个元素内的任何 XML 元素都不会出现在 table 内。我想要任何有关如何解决此问题的帮助。谢谢。
您可以在 select
属性中指定元素的路径。
而不是这样做....
<xsl:value-of select="RAM"/>
你应该这样做,因为 RAM
在 Specs
元素下面
<xsl:value-of select="Specs/RAM"/>
同理,获取Monitor,例如,这样做
<xsl:value-of select="Specs/optional/Monitor"/>