1

一部のデータに関連付けられた有用なタグがなく、データがドキュメントの先頭に含まれているという問題がありますが、これを希望どおりに表示することはできません。

タグを Column1 テキストに置き換えましたが、それらはすべて というラベルが付いているため、あまり役に立ちません。XSLT がどのように機能するかをゆっくりと学んでいますが、これは私の知識を超えています。

任意の支援をいただければ幸いです。

入力データ

<results>
<header>
    <a>Column 1 Customer Name</a>
    <a>Column 2 Customer Add</a>
    <a>Column3</a>
    <a>Column4</a>
</header>
<body>
    <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>

>

必要な XML

 <?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>

ユーザーの応答に続いて、次の XSLT を実装しました。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>

<xsl:template match="/results">
<results>
<xsl:copy-of select="header"/>
<body>
  <xsl:for-each select="body/line">
    <line>
      <xsl:for-each select="a">
        <xsl:variable name="index" select="position()" />
        <xsl:element name="{//header/a[$index]}">
          <xsl:value-of select="." />
        </xsl:element>
      </xsl:for-each>
    </line>
  </xsl:for-each>
 </body>
 </results>
</xsl:template>
</xsl:stylesheet>

私の問題は、ヘッダーにスペースが含まれている場合です。これにより、スタイル シートがスペースを含む XML タグを作成しようとするためです。

提案された置換機能を使用してみました。

<xsl:element name="{replace(//cols/c[$index],' ','')}">

そして、私はこれを間違っているか、間違った場所でこれを呼び出しているようです。

皆様のご意見をお寄せいただきありがとうございます。

4

2 に答える 2

2

あなた<xsl:element>はトリックをする必要があります。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>

<xsl:template match="/results">
  <results>
    <xsl:copy-of select="header"/>
    <body>
      <xsl:for-each select="body/line">
        <line>
          <xsl:for-each select="a">
            <xsl:variable name="index" select="position()" />
            <xsl:element name="{replace(//header/a[$index], ' ', '')}">
              <xsl:value-of select="." />
            </xsl:element>
          </xsl:for-each>
        </line>
      </xsl:for-each>
    </body>
  </results>
</xsl:template>
</xsl:stylesheet>
于 2012-11-26T18:25:41.973 に答える