Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 编写xsl或xpath语法以使用Ecrion Design Studio Publisher或其他方式重复表_Xml_Xslt_Xpath_Xslt 2.0_Ecrion - Fatal编程技术网

Xml 编写xsl或xpath语法以使用Ecrion Design Studio Publisher或其他方式重复表

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

我正在使用Ecrion的DesignStudio Publisher使用xml源设计模板。我正在尝试使用xpath或xsl实现以下功能,但不确定如何实现

例如:我有以下xml文件

<?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样式表来完成这项工作吗?你尝试了什么,结果是什么,它与你想要的结果有什么不同?标题上写着“重复”,但我看不出你想重复什么。如果这个问题不能解释清楚,我很抱歉。我在这里试图做的是在表中重复保险部分(见上文),并在各自的计划名称下列出信息。到目前为止,我还没有编写任何代码。但是,马蒂亚斯是对的。我是说汉克斯·迈克尔。我没有机会验证您发送的代码,但看起来它可以工作。如果我有任何问题,我会告诉你。把这当作答案。干杯