سؤال

لدي حاليًا وثيقة XML التي تتكون أساسًا من العديد من المحادثات بين الأشخاص مثل محادثة IM.

لدي كل محادثة تعرض كيف أريد حتى الآن ، إلا أنني أريد أن يكون كل اسم لونًا فريدًا لقدرة على القراءة.

كيف لدي هو أن XML يتحول إلى HTML مع CSS. أرغب في استخدام XPath و XSL 1.0 لهذا:

XML

<wtfwhispers xmlns="http://wtfwhispers.kicks-ass.org" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://wtfwhispers.kicks-ass.org wtfwhispers.xsd">
  <conversation uuid="Diedrick">
    <datePosted>2010-05-30</datePosted>
    <description>What a great description</description>
    <dialog>
      <dialogDate>2009-12-22</dialogDate>
      <whisper>
        <whisperTime>03:55:00</whisperTime>
        <speaker>Stubbymush</speaker>
        <babble>i said something here</babble>
      </whisper>
      <whisper>
        <whisperTime>03:56:00</whisperTime>
        <speaker>Jaymes</speaker>
        <babble>what did you say?</babble>
      </whisper>
      <whisper>
        <whisperTime>03:56:00</whisperTime>
        <speaker>Stubbymush</speaker>
        <babble>i said something here!</babble>
      </whisper>
      ...
      <whisper>
        <whisperTime>03:57:00</whisperTime>
        <speaker>Stubbymush</speaker>
        <babble>gawd ur dumb</babble>
      </whisper>
    </dialog>
  </conversation>

</wtfwhispers>

من الناحية المثالية ما أريده هو الحصول على إخراج <p class="speaker one"> لأول مكبر صوت ، <p class="speaker two"> لل 2 وهلم جرا.

كنت أحاول استخدامها وطريقة Meunchian للعثور على عدد مكبرات الصوت الفريدة التي لدي ، لكن ما لم يكن لديّ:

...
<xsl:key name="speakerList" match="wtf:whisper" use="wtf:speaker" />

    <xsl:template match="/">
        <html lang="en">
        <body>
        <p>
            <xsl:value-of select="count( key( 'speakerList', wtf:speaker ) )" />
        </p>
        </body>
        </html>
    </xsl:template> 
...

عندما أقوم بإدخال "Jaymes" أو "Subbymush" ، أحصل على العدد الصحيح من المرات التي تحدث فيها المتحدث ، ولكن ليس عدد المتحدثين في مجموع المحادثة.

شكرًا مقدماً ، وإذا كان لديك أي اقتراحات لطرق أبسط لأنني أفرط في التعويض ، فيرجى تقديم المشورة.

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

المحلول

هذا التحول:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="http://wtfwhispers.kicks-ass.org"
 >
 <xsl:output method="text"/>

 <xsl:key name="kSpeakerByVal" match="w:speaker" use="."/>

 <xsl:template match="/">
  <xsl:value-of select=
   "count(
          /*/*/*/w:whisper/w:speaker
                       [generate-id()
                       =
                        generate-id(key('kSpeakerByVal',.)[1])
                        ]
          )
   "/>
 </xsl:template>
</xsl:stylesheet>

عند تطبيقه على مستند XML المقدم ، ينتج عدد السماعات الصحيح:

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