1

私は XSLT にまったく慣れていません。そのため、いくつかの問題に直面しています。かなり大きな XML を新しい XML に変換する必要があります。しかし、私が向かっている道は、いくつかの困難に直面しています:

入力 XML は次のようになります。

<Employees>
  <Employee>
    <Name>A</Name>
    <Role>Manager</Role>
    <Salary>5000$</Salary>
  </Employee>
  <Employee>
    <Name>A</Name>
    <Role>Director</Role>
    <Salary>8000$</Salary>
  </Employee>
</Employees>

出力 XML は次のようになります。

 <Manager>
      <Employee_Name>A</Employee_Name>
 </Manager>
 <Count_Of_Employee>2</Count_Of_Employee>
 <Director>
      <Employee_Name>B</Employee_Name>
 </Director>

ここで、テンプレートを適用すると<xsl:Employees/Employee>、すべての従業員がチェックされ、 Manager Tag の直後に Director タグが作成されます。

したがって、 XSD に対して検証を実行すると、間に coutn タグがあると予想されるため、失敗します。

したがって、私の最初の質問は、ジェネリック テンプレートを作成する際に出力要素ノードの順序を制御するにはどうすればよいかということです。

<xsl:element>もう 1 つの質問は、大きな XML を変換する必要があるため、タグを生成するたびに書きたくないということです。

さまざまな汎用テンプレートを検索しようとしましたが、(ターゲット xml 内の) タグ名が (ソース XML 内の) タグ名と同じではない要素を生成するための適切な汎用テンプレートを見つけることも書き込むこともできませんでした [見つけました要素名が両方の XML で同じであるさまざまな汎用テンプレート]。

誰かが私を助けてくれませんか..私はXSL標準ライブラリも調べました..しかし、良い代替手段を見つけることができませんでした..

どんな提案やソウルションも私にとって大きな助けになるでしょう.

4

1 に答える 1

0

参照実装:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <!--Suppress unmatched text-->
    <xsl:template match="text()" />

    <xsl:template match="/">
    <root>
        <Manager>
                <Employee_Name>
                <xsl:apply-templates select="Employees/Employee[Role/. = 'Manager']"/>
                </Employee_Name>
        </Manager>
        <Count_Of_Employee>
                <xsl:value-of select="count(Employees/Employee)"/>
        </Count_Of_Employee>
        <Director>
                <Employee_Name>
                <xsl:apply-templates select="Employees/Employee[Role/. = 'Director']"/>
                </Employee_Name>
        </Director>
    </root>
    </xsl:template>

    <xsl:template match="Employee">
        <xsl:value-of select="Name"/>
    </xsl:template>
</xsl:stylesheet>
于 2013-07-02T08:52:06.613 に答える