0

私は初めてxslに取り組んでいます。xsl を必要とする xml は、部門ごとに作成されます。今私が達成しようとしているのは、一度言及された Deparment 要素を xml の person 要素ごとに設定できることです。そして、私はこれを2日間見てきましたが、これに取り組む方法がわかりません.

これは XML です。

    <?xml version="1.0" standalone="yes"?>
       <ApptoAppExport>                

          <DepartmentData>
             <DepartmentName>105</DepartmentName>
          </DepartmentData>

          <Person>
             <EmployeeNumber>0010</EmployeeNumber>
          </Person>

          <Person>
            <EmployeeNumber>0011</EmployeeNumber>
          </Person>

       </ApptoAppExport>

これが私の XSL です。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:scripts="urn:scripts.this" version="1.0">
   <xsl:output method="xml" encoding="utf-8" />
   <xsl:template match="/">
      <xsl:element name="AppPersonList">
         <xsl:apply-templates />
      </xsl:element>
   </xsl:template>
   <xsl:template match="DepartmentData|Person">
      <xsl:element name="AppPerson">
         <xsl:call-template name="PersGuid" />
         <xsl:call-template name="PersEmployeeNum" />
         <xsl:call-template name="PersDepaGuid" />
      </xsl:element>
   </xsl:template>
   <xsl:template name="PersGuid">
      <xsl:variable name="EmpNum" select="./EmployeeNumber" />
      <xsl:attribute name="PersGuid">
         <xsl:value-of select="/Document/Persons/Row[scripts:MatchInsensitive(@PersEmployeeNum, $EmpNum)]/@PersGuid" />
      </xsl:attribute>
   </xsl:template>
   <xsl:template name="PersDepaGuid">
      <xsl:variable name="Depa" select="./DepartmentName" />
      <xsl:attribute name="PersDepaGuid">
         <xsl:choose>
            <xsl:when test="/Document/Departments/Row[scripts:MatchInsensitive(@DepaName, $Depa)]">
               <xsl:value-of select="/Document/Departments/Row[scripts:MatchInsensitive(@DepaName, $Depa)]/@DepaGuid" />
            </xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="scripts:MakeError($Depa)" />
            </xsl:otherwise>
         </xsl:choose>
      </xsl:attribute>
   </xsl:template>
</xsl:stylesheet>

「Department/Row」要素は、SQL データベース テーブル構造を参照します。その要素を使用して、xsl に、指定されたテーブルで DepaName と同じ名前の行を探し、それに属する Guid を与えるように指示できます。そのため、処理のために出力ファイルに入力できます。

ここで達成したいのは、resulted.xml からのこの出力ファイルです。

<?xml version="1.0" encoding="utf-8"?>
<AppPersonList>  
<AppPerson PersGuid="ff3ecf77-f6d5-4260-a1d3-88ae13fcc931" PersDepaGuid="93e4fcba-306e-4071-ab63-248d78fed6c9" />
</AppPersonList>

しかし、これは私が得るものです:

<?xml version="1.0" encoding="utf-8"?>
<AppPersonList>  
<AppPerson PersGuid="63f09537-5681-45b4-95a1-008808b8caac" PersDepaGuid="7ff981dc-7b56-403b-8c02-77f741a72e53" />
</AppPersonList>
<AppPersonList>  
<AppPerson PersGuid="93e4fcba-306e-4071-ab63-248d78fed6c9" PersDepaGuid="IMPORTERROR:" />
</AppPersonList>
<AppPersonList>  
<AppPerson PersGuid="ff3ecf77-f6d5-4260-a1d3-88ae13fcc931" PersDepaGuid="IMPORTERROR:" />
</AppPersonList>

したがって、一度は機能するようですが、最初の要素の「PersGuid」をチェックすると正しくないため、彼がどこからそれを取得したのかよくわかりません。その後、他の要素は埋められず、"ImportError:" メッセージが表示されます。

アプリ、xml、および xsl は、データをアップロードする必要があるテーブルを参照するコマンドラインによってトリガーされます。

これについてどうすればよいですか?

あなたの反応を前もって感謝します。

4

0 に答える 0