سؤال

هذه هي المرة الأولى التي أستخدم فيها XSLT. أحاول إنشاء ملف يقوم بتحويل ملف بيانات XML تم تصديره من برنامج أستخدمه في تقرير HTML.

واحدة من قيمة العنصر هي المسار إلى ملف الصورة ، ولكن المسار الذي تم إنشاؤه هو مسار مطلق مثل

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg

لكني أريد مسارًا نسبيًا إلى اسم الملف فقط.

هل هناك طريقة من خلال ملف XLST لتحليل اسم الملف؟

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

المحلول

XPath يحتوي على substring-after الوظيفة التي تُرجع السلسلة بعد أول حدوث سلسلة أخرى. هذا لا يكفي من تلقاء نفسه ، لكن قالب مثل ما يلي: قد يفعل ذلك:

<xsl:template name="filename-only">
    <xsl:param name="path" />
    <xsl:choose>
        <xsl:when test="contains($path, '\')">
            <xsl:call-template name="filename-only">
                <xsl:with-param name="path" select="substring-after($path, '\')" />
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$path" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

مجموعة وظائف السلسلة المتاحة ليست واسعة النطاق ، لكنني وجدت أنها جيدة بما يكفي لمعظم التطبيقات التي ستحتاجها في XSLT.

نصائح أخرى

هذا يتجاوز نطاق السؤال ، لكن مايكل كاي لديه ورقة ممتازة على استخدام XSLT 2 لتحليل النص النقي في XML.

نعم ، انظر محلل عام LR (1) تم تنفيذه في XSLT 2.0. (فقط في 245 سطر).

لقد نفذت معها محلل ل JSON وحجم XPath 2.0 - بالكامل في XSLT.

XSLT بمساعدة XPath 2.0 ومختلف وظائف السلسلة يساعدها على التعامل مع هذا النوع من الأشياء.

مثال:
على افتراض أن المسار [إلى ملف JPG] المذكور في السؤال يأتي من مقتطف XML مماثل

...
<For_HTML>
   <Image1>
      <Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path>
      <Description>Photo of the parking lot</Description>
      <Width>123</Width>
      ...
    </Image1>
</For_HTML>

سيبدو مقتطف XSLT شيئًا مثل

<xsl:template match='//For_HTML/Image1'> 
     <img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}'
          alt='{./Description}'
          width=' ....  you got the idea'
     /> 
</xsl:template>

ملاحظة: لم يكن لديك وقت للاختبار ؛ لكن هذا يبحث عن الصواب.

إنه ممكن. لقد طورت البرنامج النصي التالي:http://barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/

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