我正在尝试使用Xslt 1.0从xml文档创建html。在xml文档中,有客户,并且在某些客户的名称属性中有"请参阅XXXX"信息。
这是xml文档;
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer name="Adam Dev" category="A1" phone="1234543" />
<customer name="Jerry Sngiler (see Matt Pcneiv)" category="" phone="" />
<customer name="Heid Schwan" category="B1" phone="121257456" />
<customer name="Matt Pcneiv" category="A2" phone="65656565" />
<customer name="John Lombak" category="A2" phone="787878787" />
<customer name="April Ozil (see Heid Schwan)" category="" phone="" />
<customer name="Terry Hill" category="B1" phone="1212121212" />
</customers>
我想为&#34; name&#34;创建锚定。属性为xml文档中相关的xml节点,如下所示。我的意思是当用户点击第二个节点上的Matt Pcneiv时,当用户点击6上的Heid Schwan时,页面跳转到4.node.Again上的Matt Pcneiv。节点,页面跳转到3.node上的Heid Schwan。
<html>
<head>
<style>
table,th,td
{
border:1px solid black;
border-collapse:collapse;
}
th,td
{
padding:5px;
}
</style>
</head>
<body>
<table style="width:600px">
<tr>
<th>Name</th>
<th>Category</th>
<th>Phone</th>
</tr>
<tr>
<td>Adam Dev</td>
<td>A1</td>
<td>1234543</td>
</tr>
<tr>
**<td>Jerry Sngiler (see <a href="#C1">Matt Pcneiv</a>)</td>**
<td></td>
<td></td>
</tr>
<tr>
**<td><a id="C2">Heid Schwan</a></td>**
<td>B1</td>
<td>121257456</td>
</tr>
<tr>
**<td><a id="C1">Matt Pcneiv</a></td>**
<td>A2</td>
<td>65656565</td>
</tr>
<tr>
<td>John Lombak</td>
<td>A2</td>
<td>787878787</td>
</tr>
<tr>
**<td>April Ozil (see <a href="#C2">Heid Schwan</a>)</td>**
<td></td>
<td></td>
</tr>
<tr>
<td>Terry Hill</td>
<td>B1</td>
<td>1212121212</td>
</tr>
</table>
</body>
</html>
如何使用xsl执行此操作?如果您能帮助我,我将不胜感激。 感谢。
答案 0 :(得分:0)
好的,那么。第一件事:设计输入XML的人都是白痴。首先,您可以使用结构化数据工具;你为什么要把两个名字塞进一个插槽?另一方面,确实有一天会有两个同名的客户。
除此之外,您需要做的是提取引用的名称并将其用作链接到引用人员锚点的键:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="customer-by-name" match="customer" use="@name" />
<xsl:template match="/">
<table>
<tr>
<th>Name</th>
<th>Category</th>
<th>Phone</th>
</tr>
<xsl:apply-templates select="customers/customer"/>
</table>
</xsl:template>
<xsl:template match="customer">
<tr>
<td><a id="{generate-id()}"><xsl:value-of select="@name"/></a></td>
<td><xsl:value-of select="@category"/></td>
<td><xsl:value-of select="@phone"/></td>
</tr>
</xsl:template>
<xsl:template match="customer[contains(@name, ' (see ')]">
<xsl:variable name="ref-name" select="substring-before(substring-after(@name, ' (see '), ')')" />
<tr>
<td>
<xsl:value-of select="substring-before(@name, ' (see ')"/>
<xsl:text> (see </xsl:text>
<a href="#{generate-id(key('customer-by-name', $ref-name))}"><xsl:value-of select="$ref-name"/></a>
<xsl:text>)</xsl:text>
</td>
<td><xsl:value-of select="@category"/></td>
<td><xsl:value-of select="@phone"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>