الحصول على دليل ورقة الأنماط من داخل ملف XSL - لموقع xml القابل للتكوين

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

  •  23-09-2019
  •  | 
  •  

سؤال

لدي ملف xsl لـ xml.يجب أن يكون موقع ملفات xml قابلاً للتكوين (يتم ذلك عن طريق تكوين مسار href إلى ورقة الأنماط في ملف xml) ولكن xsl يستخدم بعض الصور وبعض ملفات جافا سكريبت الأخرى ويحتاج إلى مسار إليها.المسار موجود بالقرب من ملف ورقة الأنماط مباشرةً، لذا بمجرد أن أتمكن من الحصول على دليل xsl، يمكنني الانتقال إليه.على سبيل المثال:في جهاز XML الخاص بي ، لدي:؟ xml-stylesheet type = "text/xsl" href = ". files style test.xsl"> أريد من داخل XSL إلى ". "الموقع مجرفة يمكنني القيام بذلك

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

المحلول

إليك حل XSLT 1.0 (يحتوي XSLT 2.0 على ميزات أكثر قوة لمعالجة السلسلة، مثل التعبيرات العادية):

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

 <xsl:template match="processing-instruction()">
   <xsl:variable name="vpostHref"
    select="substring-after(., 'href=')"/>

   <xsl:variable name="vhrefData1"
    select="substring($vpostHref,2)"/>

   <xsl:variable name="vhrefData2"
    select="substring($vhrefData1, 1,
                      string-length($vhrefData1)-1
                      )"/>

   <xsl:call-template name="stripBackwards">
    <xsl:with-param name="pText"
      select="$vhrefData2"/>
    <xsl:with-param name="pTextLength"
     select="string-length($vhrefData2)"/>
   </xsl:call-template>
 </xsl:template>

 <xsl:template name="stripBackwards">
  <xsl:param name="pText"/>
  <xsl:param name="pStopChar" select="'\'"/>
  <xsl:param name="pTextLength"/>

  <xsl:choose>
   <xsl:when test="not(contains($pText, $pStopChar))">
     <xsl:value-of select="$pText"/>
   </xsl:when>
   <xsl:otherwise>
     <xsl:variable name="vLastChar"
       select="substring($pText,$pTextLength,1)"/>
     <xsl:choose>
       <xsl:when test="$vLastChar = $pStopChar">
        <xsl:value-of select="substring($pText,1,$pTextLength -1)"/>
       </xsl:when>
       <xsl:otherwise>
        <xsl:call-template name="stripBackwards">
          <xsl:with-param name="pText"
           select="substring($pText,1,$pTextLength -1)"/>
          <xsl:with-param name="pTextLength" select="$pTextLength -1"/>
          <xsl:with-param name="pStopChar" select="$pStopChar"/>
        </xsl:call-template>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

عندما يتم تطبيق هذا التحويل على مستند XML التالي:

<?xml-stylesheet type="text/xsl" href=".\Files\Style\test.xsl"?>
<t/>

يتم إنتاج النتيجة الصحيحة:

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