Xml XSLT辅助-重复数据(第2部分)
我问了一个类似的问题,这个问题已经解决了 但是,我发现我还面临一个问题,即数据显示如下,而不是将标题值包含在XML标记中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
<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