سؤال

كيف نحسب قيم واضحة في عقدة في XSLT ؟

على سبيل المثال:أريد أن نحصي عدد من البلدان القائمة في بلد العقد ، في هذه الحالة ، سيكون 3.

<Artists_by_Countries>
    <Artist_by_Country>
        <Location_ID>62</Location_ID>
        <Artist_ID>212</Artist_ID>
        <Country>Argentina</Country>
    </Artist_by_Country>
    <Artist_by_Country>
        <Location_ID>4</Location_ID>
        <Artist_ID>108</Artist_ID>
        <Country>Australia</Country>
    </Artist_by_Country>
    <Artist_by_Country>
        <Location_ID>4</Location_ID>
        <Artist_ID>111</Artist_ID>
        <Country>Australia</Country>
    </Artist_by_Country>
    <Artist_by_Country>
        <Location_ID>12</Location_ID>
        <Artist_ID>78</Artist_ID>
        <Country>Germany</Country>
    </Artist_by_Country>
</Artists_by_Countries>
هل كانت مفيدة؟

المحلول

إذا كان لديك وثيقة كبيرة ، ربما كنت ترغب في استخدام "Muenchian الأسلوب" ، والتي عادة ما تستخدم في تجميع لتحديد متميزة العقد.تعلن مفتاح الفهارس الأشياء التي تريد أن تعتمد من قبل القيم متميزة:

<xsl:key name="artists-by-country" match="Artist_by_Country" use="Country" />

ثم يمكنك الحصول على <Artist_by_Country> عناصر متميزة البلدان باستخدام:

/Artists_by_Countries
  /Artist_by_Country
    [generate-id(.) =
     generate-id(key('artists-by-country', Country)[1])]

و يمكنك الاعتماد عليها خلال التفاف في الدعوة إلى count() وظيفة.

بالطبع في XSLT 2.0, انها بسيطة مثل

count(distinct-values(/Artists_by_Countries/Artist_by_Country/Country))

نصائح أخرى

في XSLT 1.0 هذا ليس واضحا ، ولكن بعد أن تعطيك فكرة عن شرط:

count(//Artist_by_Country[not(Location_ID=preceding-sibling::Artist_by_Country/Location_ID)]/Location_ID)

والمزيد من العناصر في XML يعد هذا يأخذ ، كما يتحقق في كل واحد السابقة الأخوة من كل عنصر واحد.

محاولة شيء من هذا القبيل:

count(//Country[not(following::Country/text() = text())])

"أعطني عدد كل بلد العقد دون التالية البلد مع مطابقة النص"

بت مثيرة للاهتمام من هذا التعبير ، المنظمة البحرية الدولية ، التالية محور.

ربما يمكن أيضا إزالة أول /text(), و محل ثاني مع .

إذا كان لديك السيطرة xml الجيل الأول قوع بلد يمكن إضافة سمة إلى البلاد عقدة مثل متميزة='true' علم البلاد "تستخدم" وليس في وقت لاحق إضافة متميزة السمة إذا كنت تأتي عبر هذا البلد مرة أخرى.

ثم يمكن أن تفعل

<xsl:for-each select="Artists_by_Countries/Artist_by_Country/Country[@distinct='true']" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top