Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 XSLT辅助-重复数据(第2部分)_Xml_Xslt_Xslt 2.0_Transformation_Repeat - Fatal编程技术网

Xml XSLT辅助-重复数据(第2部分)

Xml XSLT辅助-重复数据(第2部分),xml,xslt,xslt-2.0,transformation,repeat,Xml,Xslt,Xslt 2.0,Transformation,Repeat,我问了一个类似的问题,这个问题已经解决了 但是,我发现我还面临一个问题,即数据显示如下,而不是将标题值包含在XML标记中 <results> <body> <line> <a>Column 1 Customer Name</a> <a>Column 2 Customer Add</a> <a>Column3</a> <a>Column4</a> &l

我问了一个类似的问题,这个问题已经解决了

但是,我发现我还面临一个问题,即数据显示如下,而不是将标题值包含在XML标记中

<results>
<body>
<line>
  <a>Column 1 Customer Name</a>
  <a>Column 2 Customer Add</a>
  <a>Column3</a>
  <a>Column4</a>
</line>
<line>
    <a>Data1</a>
    <a>Data2</a>
    <a>Data3</a>
    <a>Data4</a>
</line>
<line>
    <a>Data1</a>
    <a>Data2</a>
    <a>Data3</a>
    <a>Data4</a>
</line>
</body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4
我设法找到了一种方法(XSLT外部)来区分这两种类型,但需要获得相同的结果,如下所示

<?xml version="1.0"?>
<results>
<header>
<a>Column 1 Customer Name</a>
<a>Column 2 Customer Add</a>
<a>Column3</a>
<a>Column4</a>
</header>
<body>
<line>
    <Column1CustomerName>Data1</Column1CustomerName>
    <Column2CustomerAdd>Data2</Column2CustomerAdd>
    <Column3>Data3</Column3>
    <Column4>Data4</Column4>
</line>
<line>
    <Column1CustomerName>Data1</Column1CustomerName>
    <Column2CustomerAdd>Data2</Column2CustomerAdd>
    <Column3>Data3</Column3>
    <Column4>Data4</Column4>
</line>
</body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4
行的数量可以是无限的,但是“标题”始终是第一行。 我已经有了我需要如何做的理论

<xsl:template match="/results/body/line[0]">

然而,这是我所能做到的

我在想,将这些数据移动到标记“header”可能更容易,这样我就可以按照我提出的另一个问题执行转换器,但不知道这是a)最佳方法,还是b)可能的方法

另外一个问题是,是否可以将这两个方法放在一个XSLT中

提前感谢


<xsl:stylesheet version="2.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:variable name="vNames" as="xs:string+" select=
     "/*/*/line[1]/a/translate(.,' ','')"/>

 <xsl:template match="/*">
   <results>
    <header>
      <xsl:sequence select="/*/*/line[1]/a"/>
    </header>
    <body>
      <xsl:apply-templates select="/*/*/line[position() ne 1]"/>
    </body>
   </results>
 </xsl:template>

 <xsl:template match="line">
  <line>
   <xsl:apply-templates select="a"/>
  </line>
 </xsl:template>

 <xsl:template match="a">
   <xsl:variable name="vPos" select="position()"/>
   <xsl:element name="{$vNames[$vPos]}"><xsl:apply-templates/></xsl:element>
 </xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:

<results>
    <body>
        <line>
            <a>Column 1 Customer Name</a>
            <a>Column 2 Customer Add</a>
            <a>Column3</a>
            <a>Column4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
    </body>
</results>
<results>
   <header>
      <a>Column 1 Customer Name</a>
      <a>Column 2 Customer Add</a>
      <a>Column3</a>
      <a>Column4</a>
   </header>
   <body>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
   </body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4
生成所需的正确结果:

<results>
    <body>
        <line>
            <a>Column 1 Customer Name</a>
            <a>Column 2 Customer Add</a>
            <a>Column3</a>
            <a>Column4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
    </body>
</results>
<results>
   <header>
      <a>Column 1 Customer Name</a>
      <a>Column 2 Customer Add</a>
      <a>Column3</a>
      <a>Column4</a>
   </header>
   <body>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
   </body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4

在提供的XML文档上应用此转换时:

<results>
    <body>
        <line>
            <a>Column 1 Customer Name</a>
            <a>Column 2 Customer Add</a>
            <a>Column3</a>
            <a>Column4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
    </body>
</results>
<results>
   <header>
      <a>Column 1 Customer Name</a>
      <a>Column 2 Customer Add</a>
      <a>Column3</a>
      <a>Column4</a>
   </header>
   <body>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
   </body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4
生成所需的正确结果:

<results>
    <body>
        <line>
            <a>Column 1 Customer Name</a>
            <a>Column 2 Customer Add</a>
            <a>Column3</a>
            <a>Column4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
        <line>
            <a>Data1</a>
            <a>Data2</a>
            <a>Data3</a>
            <a>Data4</a>
        </line>
    </body>
</results>
<results>
   <header>
      <a>Column 1 Customer Name</a>
      <a>Column 2 Customer Add</a>
      <a>Column3</a>
      <a>Column4</a>
   </header>
   <body>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
      <line>
         <Column1CustomerName>Data1</Column1CustomerName>
         <Column2CustomerAdd>Data2</Column2CustomerAdd>
         <Column3>Data3</Column3>
         <Column4>Data4</Column4>
      </line>
   </body>
</results>

第1列客户名称
第2栏客户添加
第3栏
专栏4
数据1
数据2
数据3
数据4
数据1
数据2
数据3
数据4