এক্সএসএলের অভ্যন্তরে কাউন্টার: প্রতিটি লুপের জন্য


90

এক্সএসএল-এর অভ্যন্তরে কীভাবে একটি কাউন্টার পাবেন: প্রতিটি লুপের জন্য যা প্রক্রিয়াজাত বর্তমান উপাদানটির সংখ্যাকে প্রতিবিম্বিত করে।
উদাহরণস্বরূপ, আমার উত্স এক্সএমএল

<books>
    <book>
        <title>The Unbearable Lightness of Being </title>
    </book>
    <book>
        <title>Narcissus and Goldmund</title>
    </book>
    <book>
        <title>Choke</title>
    </book>
</books>

আমি যা পেতে চাই তা হ'ল:

<newBooks>
    <newBook>
        <countNo>1</countNo>
        <title>The Unbearable Lightness of Being </title>
    </newBook>
    <newBook>
        <countNo>2</countNo>
        <title>Narcissus and Goldmund</title>
    </newBook>
    <newBook>
        <countNo>3</countNo>
        <title>Choke</title>
    </newBook>
</newBooks>

সংশোধন করার জন্য এক্সএসএলটি:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <newBooks>
            <xsl:for-each select="books/book">
                <newBook>
                    <countNo>???</countNo>
                    <title>
                        <xsl:value-of select="title"/>
                    </title>
                </newBook>
            </xsl:for-each>
        </newBooks>
    </xsl:template>
</xsl:stylesheet>

সুতরাং প্রশ্নটি কি স্থাপন করা যায় ???? কোনও স্ট্যান্ডার্ড কীওয়ার্ড আছে বা আমার কি কেবল একটি পরিবর্তনশীল ঘোষণা করতে হবে এবং লুপের ভিতরে এটি বৃদ্ধি করতে হবে?

প্রশ্নটি বেশ দীর্ঘ হওয়ায় আমার সম্ভবত একটি লাইন বা একটি শব্দের উত্তর আশা করা উচিত :)

উত্তর:


142

position()। ইজি:

<countNo><xsl:value-of select="position()" /></countNo>

9
আপনাকে এক্সএসএল-এর মতো ফিল্টার যুক্ত না করা পর্যন্ত এটি সমস্ত সূক্ষ্ম এবং ছিমছাম: যদি আপনার এক্সএসএল এর ভিতরে থাকে: প্রতিটি জন্য। তারপরে অবস্থান () হ'ল ব্যবহারযোগ্য এবং আপনার সঠিক কাউন্টার দরকার।
মাইক স্টারভ

4
@ মাইক স্টাভরভ এটি প্রশ্নের অংশ ছিল না! প্রতিটি পরিস্থিতি cover
াকতে

পুনঃটুইট শুধু আমার দুটি সেন্ট যোগ করুন। আমার বর্ণিত পরিস্থিতি সমাধানের জন্য আমাকে একটি এক্সএসএল এক্সটেনশন ফাংশন লিখতে হয়েছিল। হয়তো আমার এখানে লোকদের আরও ভাল সমাধান সম্পর্কে জিজ্ঞাসা করা উচিত।
মাইক স্টারভ

4
@ মাইক স্টারভ তাহলে যদি xsl:ifভিতরে কোনও ভিতরে থাকে তবে কীভাবে করবেন xsl:for-each? "যথাযথ কাউন্টার" কী? আপনি কিছু উত্স নির্দেশ করতে পারেন?
লাজার

@ লাজেরে আপনি এক্সএসএল থেকে কল করার জন্য একটি কাস্টম এক্সটেনশন ফাংশন লিখেন। আপনি দুটি পাস প্রসেসিংও করতে পারেন। একবার প্রক্রিয়া করুন এবং এক্সএসএল সংরক্ষণ করুন: পরিবর্তনশীল। তারপরে এক্সএসএল ভেরিয়েবল সামগ্রীগুলিতে টেমপ্লেটগুলি প্রয়োগ করুন এবং অবস্থান () ব্যবহার করে সংখ্যায়ন যুক্ত করুন
মাইক স্টারভ

13

Theোকানোর চেষ্টা করুন <xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>???

"1." নোট করুন - এটি সংখ্যার ফর্ম্যাট। আরও তথ্য: এখানে


ধন্যবাদ, এটিও একটি আকর্ষণীয় পাঠ্য some কিছু ফর্ম্যাটিংয়ের প্রয়োজন হলে আমি সম্ভবত সেই পদ্ধতিটি ব্যবহার করব
ক্রিস্টফ

এক্সএসএলটি 1.0 সংস্করণ:<xsl:number format="1. " value="position()"/>
jsuddsjr

10

চেষ্টা করুন:

<xsl:value-of select="count(preceding-sibling::*) + 1" />

সম্পাদনা করুন - সেখানে একটি মস্তিষ্ক হিমশীতল ছিল, অবস্থান () আরও সরল!


4
তবুও দরকারী হতে পারে, বিশেষত যদি আপনি অবস্থান () ব্যতীত অন্যান্য মানদণ্ডের ভিত্তিতে নির্বাচন করছেন। +1
jsuddsjr

7

আপনি পজিশনে শর্তযুক্ত বিবৃতিও চালাতে পারেন () যা অনেক পরিস্থিতিতে সত্যই সহায়ক হতে পারে।

যেমন।

 <xsl:if test="(position( )) = 1">
     //Show header only once
    </xsl:if>

4
এটি যদি আপনার কোনও এক্সএসএল: বাছাইয়ের মতো ফিল্টার থাকে তবে এটি ব্যর্থ হয় কারণ প্রথম আইটেমটি প্রথম প্রক্রিয়াজাত নাও হতে পারে।
অ্যালেক্সিস উইলকে

5
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <newBooks>
                <xsl:for-each select="books/book">
                        <newBook>
                                <countNo><xsl:value-of select="position()"/></countNo>
                                <title>
                                        <xsl:value-of select="title"/>
                                </title>
                        </newBook>
                </xsl:for-each>
        </newBooks>
    </xsl:template>
</xsl:stylesheet>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.