我有以下xsl样式表和xml但是我无法在xsl模板中获取xml父节点中的元素匹配不起作用,我无法从xml获取表和costumer节点
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Title</TITLE>
</HEAD>
<BODY>
<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="/parent">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="costumer">
<p>Costumer</p>
</xsl:template>
<xsl:template match="table">
<xsl:variable name="name" select="@name"/>
<xsl:variable name="type" select="@type"/>
<xsl:variable name="height" select="@height"/>
<xsl:variable name="width" select="@wdth"/>
<xsl:variable name="margin-top" select="@margin-top"/>
<xsl:variable name="margin-left" select="@margin-left"/>
<table id="{$name}" width="{$width}" height="{$height}" style="margin-top:{$margin-top}; margin-left:{$margin-left}">
<thead>
<tr>
<xsl:apply-templates select="*[1]/*" mode="th"/>
</tr>
</thead>
<tbody>
<xsl:apply-templates select="*"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="/*/*/*" mode="th">
<th>
<xsl:value-of select="*"/>
</th>
</xsl:template>
<xsl:template match="/*/*">
<tr>
<xsl:apply-templates select="*"/>
</tr>
</xsl:template>
<xsl:template match="/*/*/*">
<xsl:variable name="texttd" select="@text"/>
<td>
<xsl:value-of select="$texttd"/>
</td>
</xsl:template>
</xsl:stylesheet>
以下是xml文件
<?xml version="1.0" encoding="utf-8"?>
<parent>
<table name="region1" type="td" wdth="0" height="0" margin-top="1" margin-left="122">
<td margin-top="0" margin-left="152" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
<Text name="region1" type="Title" wdth="0" height="0" margin-top="7" margin-left="138">
<Title margin-top="0" margin-left="14" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
</Text>
</table>
<table name="region1" type="td" wdth="0" height="0" margin-top="1" margin-left="122">
<td margin-top="0" margin-left="152" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
<Text name="region1" type="Title" wdth="0" height="0" margin-top="7" margin-left="138">
<Title margin-top="0" margin-left="14" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
</Text>
</table>
<table name="region1" type="td" wdth="0" height="0" margin-top="1" margin-left="122">
<td margin-top="0" margin-left="152" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
<Text name="region1" type="Title" wdth="0" height="0" margin-top="7" margin-left="138">
<Title margin-top="0" margin-left="14" width="36" height="13" font-family="Arial-BoldMT" font-size="16" font-weight="0" text="??"?" line-height="300" is-visible="True" color="#0A4462" />
</Text>
</table>
<costumer></costumer>
<costumer></costumer>
</parent>
答案 0 :(得分:1)
<xsl:template match="/*/*/*" >
等通用模板获得更高的优先级。似乎表达式中的斜杠数/
计入优先级。
我认为你应该通过使XPath更具体来提高你想要的模板的优先级
<xsl:template match="/parent/table">
<xsl:template match="/parent/costumer">
这仍然不适用于costumer
,因此您需要将其移至样式表的末尾,因为在优先级相同的情况下,最后的项目是首选。
您还可以明确地降低通用项目的优先级,如下所示:
<xsl:template match="/*/*/*" priority="-1">
作为替代方案,您可以明确增加所需项目的优先级:
<xsl:template match="table" priority="5">
其他我需要完整的预期输出,看看是否所有这些都有助于构建您正在寻找的解决方案。
顺便说一句:我想你想要客户而不是客户。