Xml 编写xsl或xpath语法以使用Ecrion Design Studio Publisher或其他方式重复表
我正在使用Ecrion的DesignStudio Publisher使用xml源设计模板。我正在尝试使用xpath或xsl实现以下功能,但不确定如何实现 例如:我有以下xml文件Xml 编写xsl或xpath语法以使用Ecrion Design Studio Publisher或其他方式重复表,xml,xslt,xpath,xslt-2.0,ecrion,Xml,Xslt,Xpath,Xslt 2.0,Ecrion,我正在使用Ecrion的DesignStudio Publisher使用xml源设计模板。我正在尝试使用xpath或xsl实现以下功能,但不确定如何实现 例如:我有以下xml文件 <?xml version="1.0" encoding="utf-8"?> <DOCUMENT> <PLAN> <PLANNAME>Plan 1</PLANNAME> <BENEFITS> <INS
<?xml version="1.0" encoding="utf-8"?>
<DOCUMENT>
<PLAN>
<PLANNAME>Plan 1</PLANNAME>
<BENEFITS>
<INSURANCE>
<CATEGORY ID="1">
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 1</PREMIUM>
<INNETWORK>In network 1</INNETWORK>
</INSURANCE>
<INSURANCE>
<CATEGORY ID="2">
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 4</PREMIUM>
<INNETWORK>In network 4</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 2</PLANNAME>
<BENEFITS>
<INSURANCE>
<CATEGORY ID="1">
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 2</PREMIUM>
<INNETWORK>In network 2</INNETWORK>
</INSURANCE>
<INSURANCE>
<CATEGORY ID="2">
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 5</PREMIUM>
<INNETWORK>In network 5</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 3</PLANNAME>
<BENEFITS>
<INSURANCE>
<CATEGORY ID="1">
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 3</PREMIUM>
<INNETWORK>In network 3</INNETWORK>
</INSURANCE>
<INSURANCE>
<CATEGORY ID="2">
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 6</PREMIUM>
<INNETWORK>In network 6</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
</DOCUMENT>
给定格式良好的输入:
<DOCUMENT>
<PLAN>
<PLANNAME>Plan 1</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 1</PREMIUM>
<INNETWORK>In network 1</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 4</PREMIUM>
<INNETWORK>In network 4</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 2</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 2</PREMIUM>
<INNETWORK>In network 2</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 5</PREMIUM>
<INNETWORK>In network 5</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 3</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 3</PREMIUM>
<INNETWORK>In network 3</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 6</PREMIUM>
<INNETWORK>In network 6</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
</DOCUMENT>
<?xml version="1.0" encoding="UTF-8"?>
<table>
<thead>
<tr>
<th>Plan 1</th>
<th>Plan 2</th>
<th>Plan 3</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="3">Insurance 1</th>
</tr>
<tr>
<td>Premium 1</td>
<td>Premium 2</td>
<td>Premium 3</td>
</tr>
<tr>
<td>In network 1</td>
<td>In network 2</td>
<td>In network 3</td>
</tr>
<tr>
<th colspan="3">Insurance 2</th>
</tr>
<tr>
<td>Premium 4</td>
<td>Premium 5</td>
<td>Premium 6</td>
</tr>
<tr>
<td>In network 4</td>
<td>In network 5</td>
<td>In network 6</td>
</tr>
</tbody>
</table>
计划1
保险1
保费1
在网络1中
保险2
保费4
在网络4中
计划2
保险1
溢价2
在网络2中
保险2
保费5
在网络5中
计划3
保险1
溢价3
在网络3中
保险2
溢价6
在网络6中
以下样式表:
XSLT1.0
<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:template match="/">
<xsl:variable name="cols" select="DOCUMENT/PLAN" />
<xsl:variable name="rows" select="DOCUMENT/PLAN[1]/BENEFITS/INSURANCE" />
<table>
<thead>
<tr>
<xsl:for-each select="$cols">
<th><xsl:value-of select="PLANNAME"/></th>
</xsl:for-each>
</tr>
</thead>
<tbody>
<xsl:for-each select="$rows">
<xsl:variable name="rownum" select="position()" />
<tr>
<th colspan="{count($cols)}"><xsl:value-of select="LABEL"/></th>
</tr>
<tr>
<xsl:for-each select="$cols">
<td><xsl:value-of select="BENEFITS/INSURANCE[$rownum]/PREMIUM"/></td>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="$cols">
<td><xsl:value-of select="BENEFITS/INSURANCE[$rownum]/INNETWORK"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
将产生以下结果:
<DOCUMENT>
<PLAN>
<PLANNAME>Plan 1</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 1</PREMIUM>
<INNETWORK>In network 1</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 4</PREMIUM>
<INNETWORK>In network 4</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 2</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 2</PREMIUM>
<INNETWORK>In network 2</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 5</PREMIUM>
<INNETWORK>In network 5</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
<PLAN>
<PLANNAME>Plan 3</PLANNAME>
<BENEFITS>
<INSURANCE>
<LABEL>Insurance 1</LABEL>
<PREMIUM>Premium 3</PREMIUM>
<INNETWORK>In network 3</INNETWORK>
</INSURANCE>
<INSURANCE>
<LABEL>Insurance 2</LABEL>
<PREMIUM>Premium 6</PREMIUM>
<INNETWORK>In network 6</INNETWORK>
</INSURANCE>
</BENEFITS>
</PLAN>
</DOCUMENT>
<?xml version="1.0" encoding="UTF-8"?>
<table>
<thead>
<tr>
<th>Plan 1</th>
<th>Plan 2</th>
<th>Plan 3</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="3">Insurance 1</th>
</tr>
<tr>
<td>Premium 1</td>
<td>Premium 2</td>
<td>Premium 3</td>
</tr>
<tr>
<td>In network 1</td>
<td>In network 2</td>
<td>In network 3</td>
</tr>
<tr>
<th colspan="3">Insurance 2</th>
</tr>
<tr>
<td>Premium 4</td>
<td>Premium 5</td>
<td>Premium 6</td>
</tr>
<tr>
<td>In network 4</td>
<td>In network 5</td>
<td>In network 6</td>
</tr>
</tbody>
</table>
计划1
计划2
计划3
保险1
保费1
溢价2
溢价3
在网络1中
在网络2中
在网络3中
保险2
保费4
保费5
溢价6
在网络4中
在网络5中
在网络6中
渲染为:
是的,我不想硬编码Id值,因为每个文件的Id值可能不同。如果有四个、五个或六个保险“计划”,那么标题是什么样的。。。您没有提供足够的信息来生成通用解决方案。您是否将“Xpath”误认为“XSLT”?你的意思是写一个XSLT样式表来完成这项工作吗?你尝试了什么,结果是什么,它与你想要的结果有什么不同?标题上写着“重复”,但我看不出你想重复什么。如果这个问题不能解释清楚,我很抱歉。我在这里试图做的是在表中重复保险部分(见上文),并在各自的计划名称下列出信息。到目前为止,我还没有编写任何代码。但是,马蒂亚斯是对的。我是说汉克斯·迈克尔。我没有机会验证您发送的代码,但看起来它可以工作。如果我有任何问题,我会告诉你。把这当作答案。干杯