كيف يمكنني تحويل رقم إلى تكرار الأحرف في XSLT؟

StackOverflow https://stackoverflow.com/questions/324259

  •  11-07-2019
  •  | 
  •  

سؤال

ولدي الإدخال التالية:

<node TEXT="txt">
  <node TEXT="txt">
    <node TEXT="txt"/>
    <node TEXT="txt"/>
  </node>
  <node TEXT="txt"/>
</node>
<node TEXT="txt"/>

وأنا حاليا باستخدام:

<xsl:number level="multiple" count="node" format="1"/>

وضمن برنامج نصي XSTL لتلقي الإخراج التالي:

1 txt
1.1 txt
1.1.1 txt
1.1.2 txt
1.2 txt
2 txt

ولكن أريد أن يكون هذا الإخراج:

* txt
** txt
*** txt
*** txt
** txt
* txt

هل يمكنك مساعدتي؟

وPS: أريد تحويل خريطة freemind لتركيب قائمة ميدياويكي الأساسي. ونعم! وأنا أدرك أن هناك العديد من الطرق للحصول على خرائط freemind الأم في الويكي وسائل الإعلام، ولكن أنا في حاجة إلى تحويل <node> شجرة ل*** قوائم

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

المحلول

واحد طريقة بسيطة للقيام بذلك هو مجرد ترجمة نتيجة ل

<xsl:number/>
في الشكل المطلوب.

وهذا التحول:

و<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

و<xsl:output method="text"/>

و<xsl:strip-space elements="*"/>

<xsl:template match="node">
  <xsl:variable name="vIndent">
    <xsl:number level="multiple" count="node"/>
  </xsl:variable>

  <xsl:value-of select=
   "concat(translate($vIndent,
                     '1234567890.',
                     '**********'),
           ' ',
           @TEXT,
         '&#xA;'
         )"/>
 <xsl:apply-templates/>
</xsl:template>

و</xsl:stylesheet>

وعندما يطبق على هذه الوثيقة XML:

<t>
    <node TEXT="txt">
        <node TEXT="txt">
            <node TEXT="txt"/>
            <node TEXT="txt"/></node>
        <node TEXT="txt"/></node>
    <node TEXT="txt"/>
</t>

وتنتج نتيجة المطلوبين:

* txt
** txt
*** txt
*** txt
** txt
* txt

لاحظ استخدام وظيفة ترجمة () لتجاهل أي "." شخصيات ولترجمة أي رقم إلى "*".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top