2

これが私の問題です。

呼び出しテンプレート、別のファイルのテンプレート コード、テンプレート コードのコンテンツを編集できるが、メインの XSLT を編集できない事前ビルド XSLT があります。

私の現在のコード

School_College.xsl (これは編集できません)

<xsl:stylesheet version="1.0"
            xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:ns0="http://www.myschool.org"
            xmlns:ora="http://schemas.oracle.com/xpath/extension"
            xmlns:ns1="http://www.mycollege.org"

         <xsl:import href="school_college_custom.xsl"></xsl:import>

 <xsl:template match="/">
   <ns1:College>
     <ns1:Batch>
       <ns1:StudentsCount>
         <xsl:value-of select="/ns0:School/ns0:Class/ns0:NoOfStudents"/>
       </ns1:StudentsCount>
       <ns1:TeachersCount>
          <xsl:value-of select="/ns0:School/ns0:Class/ns0:NoOfTeachers"/>
       </ns1:TeachersCount>
       <ns1:BatchStartTime>
          <xsl:value-of select="/ns0:School/ns0:Class/ns0:ClassStartTime"/>
       </ns1:BatchStartTime>

       <xsl:call-template name="batch_ext"></xsl:call-template>

     </ns1:Batch>
   </ns1:College>
</xsl:template>

school_college_custom.xsl (これを変更し、インポートして上から呼び出すことができます)

<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.mycollege.org">

  <xsl:template name="batch_ext">
        <ns1:BatchEndTime>
          <xsl:value-of select="'5PM'"/>
        </ns1:BatchEndTime>
        <ns1:BreakTime>
          <xsl:value-of select="'1PM'"/>
        </ns1:BreakTime>
  </xsl:template>
</xsl:stylesheet>

ソース XML:

<?xml version="1.0" encoding="UTF-8" ?>
  <School xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.myschool.org xsd/school.xsd"
    xmlns="http://www.myschool.org">
   <Class>
     <NoOfStudents>10</NoOfStudents>
     <NoOfTeachers>2</NoOfTeachers>
     <ClassStartTime>9AM</ClassStartTime>
  </Class>
 </School>

ターゲット XML:(現在)

<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
     xmlns="http://www.mycollege.org">
  <Batch>
    <StudentsCount>10</StudentsCount>
    <TeachersCount>2</TeachersCount>
    <BatchStartTime>9AM</BatchStartTime>
    <BatchEndTime>5PM</BatchEndTime>
    <BreakTime>1PM</BreakTime>
  </Batch>
</College>

BatchStartTime を 10AM (任意の値) に更新する方法はありますか。しかし、school_college_custom.xsl のみを変更する必要があります。テンプレートに「BatchStartTime」要素を追加すると(以下のように)、重複する要素が作成されます

私のコード:これは機能していません(重複ノードを作成しています)

<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.mycollege.org">

  <xsl:template name="batch_ext">
        <ns1:BatchStartTime>
          <xsl:value-of select="'10AM'"/>
        </ns1:BatchStartTime>
        <ns1:BatchEndTime>
          <xsl:value-of select="'5PM'"/>
        </ns1:BatchEndTime>
        <ns1:BreakTime>
          <xsl:value-of select="'1PM'"/>
        </ns1:BreakTime>
  </xsl:template>
</xsl:stylesheet>

ターゲット XML:(予想どおり、このような出力が必要です)

<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
     xmlns="http://www.mycollege.org">
  <Batch>
    <StudentsCount>10</StudentsCount>
    <TeachersCount>2</TeachersCount>
    <BatchStartTime>10AM</BatchStartTime>
    <BatchEndTime>5PM</BatchEndTime>
    <BreakTime>1PM</BreakTime>
  </Batch>
</College>

ターゲット XML:(上記のコードからの実際の出力)

<?xml version="1.0" encoding="UTF-8" ?>
<College xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.mycollege.org ../xsd/college.xsd"
     xmlns="http://www.mycollege.org">
  <Batch>
    <StudentsCount>10</StudentsCount>
    <TeachersCount>2</TeachersCount>
    <BatchStartTime>9AM</BatchStartTime>
    <BatchStartTime>10AM</BatchStartTime>
    <BatchEndTime>5PM</BatchEndTime>
    <BreakTime>1PM</BreakTime>
  </Batch>
</College>

解決策を教えてください。前もって感謝します。

4

1 に答える 1

0

いいえ、カスタム テンプレートが呼び出される前に結果ツリーに既に追加されているノードを変更することはできません。結果に挿入する値を取得するxsl:apply-templates代わりに、メインの (インポートする) XSLT を使用する場合は、次のように定義できます。xsl:value-of

<xsl:template match="ns0:ClassStartTime">10AM</xsl:template>

この要素のデフォルトのテンプレートをオーバーライドすることはできますが、メインの XSLT がそのまま書かれているので、何もできません。

于 2012-12-08T21:46:09.673 に答える