0

さて、私は変更しようとしているこのXMLデータを持っています。XSLTを作成しましたが、うまくいきません。XSLTの何が問題になっているのかを理解するのに助けが必要です。

XSLTを使用して変更する必要があるXMLは次のとおりです。

<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">
   <bb:Report_Entry>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:projectedBalanceTotal.effectiveDate1>08122012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.effectiveDate2>08262012</bb:projectedBalanceTotal.effectiveDate2>
      <bb:projectedBalanceTotal.effectiveDate3>09092012</bb:projectedBalanceTotal.effectiveDate3>
                <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </bb:Report_Entry>

</bb:Report_Data>

これは私がそれをどのように見えるようにする必要があるかです:

<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">

   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>

   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>

   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
         <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
         <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
         <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>

</bb:Report_Data>

これは私が使用しているXSLTであり、トリックを実行していません。

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:wd="urn:com.playdate.report/Projected_Absence_Balances-Outbound">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
 <bb:Report_Data>
   <xsl:apply-templates select="*/*/*/*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]"/>
 </bb:Report_Data>
</xsl:template>

<xsl:template match="*">
   <projectedBalanceTotal>
     <xsl:copy-of select="
       ../../bb:projectedBalanceTotal.principalId      |
       ../bb:projectedBalanceTotal.planCodeId          |
       ../bb:projectedBalanceTotal.leaveDescription    |
       ../bb:projected_balance_accrual_amount_for_the_pay_period" />
     <bb:projectedBalanceTotal.effectiveDate>
      <xsl:value-of select="." />
     </bb:projectedBalanceTotal.effectiveDate>
     <xsl:copy-of select="../../bb:projectedBalanceTotal.employeeId" />
   </projectedBalanceTotal>
</xsl:template>

</xsl:stylesheet>

WDプレフィックスを削除できればいいのですが。どんな助けでも大歓迎です!!!!

4

2 に答える 2

0

あなたのスタイルシートを見て最初に私を驚かせるのは、宣言されていない名前空間プレフィックスbbがXPath式とリテラル結果要素で数回発生することです。プレフィックスを宣言しますwdが、使用しないでください。bb名前空間がバインドされるべきものだと思います。

2つ目は、XMLがXSLTを不自然な行為の実行に強制していることです。語彙の設計に影響がある場合は、名前などを削除する必要がありますprojectedBalanceTotal.effectiveDate1。シーケンス番号(情報を提供せず、通常のXPath式の使用を妨げる)を取り除き、要素名がないように要素を再構築します。これらの方法で2つの情報を運ぶため。

3つ目は、名前空間エラーが修正された後もスタイルシートが出力を生成しない理由は、 /のテンプレート内selectの命令の属性がxsl:apply-templates何にも一致しないためです。

これがお役に立てば幸いです。幸運を。

于 2012-08-17T04:17:46.887 に答える
0

おそらく最初にbb:Report_Entry要素を照合することから始める必要があると思います

<xsl:apply-templates select="bb:Report_Data/bb:Report_Entry"/>

次に、そのようなエントリごとに、発効日を一致させようとします

<xsl:apply-templates 
   select="*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]"/>

次に、日付に一致するテンプレート内で、bb:All_Eligible_Time_Off_Plans_for_Worker要素に一致しますが、パラメーターとして日付を渡します。

<xsl:template match="*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]">
   <xsl:apply-templates select="../bb:All_Eligible_Time_Off_Plans_for_Worker">
      <xsl:with-param name="date" select="."/>
   </xsl:apply-templates>
</xsl:template>

次に、 bb:All_Eligible_Time_Off_Plans_for_Workerのテンプレートは、パラメーターとして渡された有効値とともに、内の要素を出力できます。

これが完全なXSLTです

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
      <bb:Report_Data>
         <xsl:apply-templates select="bb:Report_Data/bb:Report_Entry"/>
      </bb:Report_Data>
   </xsl:template>

   <xsl:template match="bb:Report_Entry">
      <xsl:apply-templates select="*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]"/>
   </xsl:template>

   <xsl:template match="*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]">
      <xsl:apply-templates select="../bb:All_Eligible_Time_Off_Plans_for_Worker">
         <xsl:with-param name="date" select="."/>
      </xsl:apply-templates>
   </xsl:template>

   <xsl:template match="bb:All_Eligible_Time_Off_Plans_for_Worker">
      <xsl:param name="date"/>
      <projectedBalanceTotal>
         <xsl:copy-of select="../bb:projectedBalanceTotal.principalId"/>
         <xsl:copy-of select="*"/>
         <bb:projectedBalanceTotal.effectiveDate>
            <xsl:value-of select="$date"/>
         </bb:projectedBalanceTotal.effectiveDate>
         <xsl:copy-of select="../bb:projectedBalanceTotal.employeeId"/>
      </projectedBalanceTotal>
   </xsl:template>
</xsl:stylesheet>

サンプルXMLに適用すると、次のように出力されます。

<?xml version="1.0"?>
<bb:Report_Data xmlns:bb="urn:com.playdate.report/Absence_Balances-Outbound">
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08122012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>08262012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Sick</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Sick</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Vacation</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Vacation</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323077</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1040182074</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>Winter Recess</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveDescription>Winter Recess</bb:projectedBalanceTotal.leaveDescription>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate>09092012</bb:projectedBalanceTotal.effectiveDate>
      <bb:projectedBalanceTotal.employeeId>0260971</bb:projectedBalanceTotal.employeeId>
   </projectedBalanceTotal>
</bb:Report_Data>

名前空間を実際に変更したいかどうかは完全にはわかりませんでした。そのため、現在XSLTは名前空間を同じに保っています。

于 2012-08-17T08:18:12.710 に答える