1

我在这里问了一个类似的问题,该问题已解决。

但是,我发现我还面临一个问题,即数据显示如下,而不是将标头值包含在 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>

我设法找到了一种方法(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>

行数可以不受限制,但“标题”始终是第一行。我有关于我需要如何做到这一点的理论,通过

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

然而,这就是我所拥有的。

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

作为一个额外的问题,是否可以将这两种方法放在一个 XSLT 中?

提前致谢

4

1 回答 1

1
<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>
于 2012-12-17T15:33:30.363 回答