سؤال

وأنا أحاول أن تجتاز دوكبوك القسم العقد. بنيتها هي كما يلي:

<sect1>
   <sect2>
      <sect3>
         <sect4>
            <sect5>
            </sect5>
         </sect4>
      </sect3>
   </sect2>
</sect1>

وهكذا sect1 وsect2 فقط في الداخل، سيكون قد sect3 sect2 فقط في الداخل، وهلم جرا. يمكننا أيضا أن يكون العقد من الباطن متعددة ضمن العقدة. على سبيل المثال sect2 متعددة ضمن sect1.

وبرمجيا أود أن تكرار من خلالها بشكل متكرر باستخدام عداد لتتبع القسم الذي تكون الحلقة في.

وهذه المرة لديك لاستخدام XSLT وحلقة من خلال ذلك. وبالتالي هناك طريقة ما يعادلها، أو طريقة أفضل للقيام بذلك في XSLT؟

وتحرير: لدي بالفعل رمز مشابهة على النحو الذي اقترحه ويلي، حيث يمكنني تحديد كل عقدة الطائفة (sect1 إلى sect5). أنا أبحث عن حل حيث حلقات تحديد عقدة الطائفة في حد ذاته، وأنا لن يكون لتكرار التعليمات البرمجية. وأنا أدرك أن المواصفات دوكبوك فقط يسمح ما يصل الى 5 العقد المتداخلة.

هل كانت مفيدة؟

المحلول

إذا كنت تفعل نفس المعالجة لجميع الطائفة {س} العقد، regardles من {س}، كما تقول في أحد التعليقات، ثم ما يلي يكفي : ل

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match=
     "sect1|sect2|sect3|sect4|sect5">
      <!-- Some processing here -->
      <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

إذا كنت حقا بحاجة الى معالجة في نفس الطريق العديد من عناصر وجود أسماء مختلفة من "الطائفة" شكل {س} (دعنا نقول x هو في النطاق [1، 100])، ثم التالية يمكن استخدامها:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match=
     "*[starts-with(name(), 'sect')
      and
        substring-after(name(), 'sect') >= 1
      and
        not(substring-after(name(), 'sect') > 101)
       ]">
      <!-- Some processing here -->
      <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

نصائح أخرى

<xsl:template match="sect1">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect2">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect3">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect4">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>

<xsl:template match="sect5">
    <!-- Do stuff -->
    <xsl:apply-templates />
</xsl:template>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top