Использовать субэлементы внутри XSLT-файла?

У меня проблемы. Во-первых, я прошу прощения, если слова, которые я использую, не являются правильными словами, я совершенно новичок в 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 внутри другого элемента не будет отображаться внутри таблицы. Я хотел бы любую помощь о том, как я мог это исправить. Спасибо.

1 ответ

Решение

Вы можете указать путь к элементу в select приписывать.

Вместо этого....

 <xsl:value-of select="RAM"/>

Вы должны сделать это, так как RAM находится под Specs элемент

 <xsl:value-of select="Specs/RAM"/>

Точно так же, чтобы получить монитор, например, сделать это

 <xsl:value-of select="Specs/optional/Monitor"/>
Другие вопросы по тегам