क्या एक्सएसएलटी में एक विशिष्ट टैग ढूंढना और इसे इसकी सामग्री से बदलना संभव है? उदाहरण के लिए, यह एक्सएमएल दिया गया है:

<span>Hello world</span>

हम इसके साथ समाप्त करेंगे:

Hello world

तो किसी भी स्तर पर (पुनरावर्ती) बेकार और निरर्थक SPAN टैग को इसकी सामग्री से बदल दिया जाता है। हम "नग्न" स्पैन टैग (जिनमें कोई विशेषता नहीं है) खोजना चाहते हैं और उन्हें उनकी सामग्री से बदलना चाहते हैं।

मैं एक्सएमएल संसाधित कर रहा हूं जिस पर मेरा नियंत्रण नहीं है। धन्यवाद।

अपडेट करें: यहां बताया गया है कि *.XSL फ़ाइल में क्या है, उसके बाद नमूना आउटपुट:

<xsl:stylesheet 
  version="1.0" 
  exclude-result-prefixes="x d xsl msxsl cmswrt"
  xmlns:x="http://www.w3.org/2001/XMLSchema" 
  xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" 
  xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  <xsl:param name="ItemsHaveStreams">
    <xsl:value-of select="'False'" />
  </xsl:param>
  <xsl:variable name="OnClickTargetAttribute" select="string('javascript:this.target=&quot;_blank&quot;')" />
  <xsl:variable name="ImageWidth" />
  <xsl:variable name="ImageHeight" />
  <xsl:template name="Contact" match="Row[@Style='Contact']" mode="itemstyle">
      <div class="outer-container">
      <table border="0" cellspacing="0" width="100%">
        <tr>
          <td class="ms-vb" style="text-align:left; padding:9px;">
            <span style="font-weight:bold; border-bottom:1px solid #999;"><xsl:value-of select="@Title"/></span>

            <!-- Phone and Emergency Phone -->
            <xsl:if test="@Phone != '' or @EmergencyPhone != ''">
              <xsl:if test="@Phone != ''">
                <xsl:value-of select="@Phone" disable-output-escaping="yes"/><br />
              </xsl:if>
              <xsl:if test="@EmergencyPhone != ''">
                <xsl:value-of select="@EmergencyPhone" disable-output-escaping="yes"/>
              </xsl:if>
            </xsl:if>

            <!-- Email -->
            <xsl:if test="@Email != ''">
              <span style="text-align:left">E-mail: <a href="mailto:{@Email}"><xsl:value-of select="@Email"/></a></span>
            </xsl:if>

            <!-- Address & Map -->
            <!--
              Must test for both empty string and empty div tags, escaped.
            -->
            <xsl:if test="@Address != '' and @Address !='&lt;div&gt;&lt;/div&gt;'">
              <p>Address: <xsl:value-of select="@Address" disable-output-escaping="yes"/></p>
            </xsl:if>
            <xsl:if test="@Map != ''">
              (<a href="{@Map}">MAP</a>)
            </xsl:if>

            <!-- Opening Hours -->
            <xsl:if test="@OpeningHours != ''">
              <p><b>Opening Hours:</b></p>
              <xsl:value-of select="@OpeningHours" disable-output-escaping="yes"/>
            </xsl:if>
          </td>                 
        </tr>
      </table> 
      </div> 
  </xsl:template>
</xsl:stylesheet>

यहाँ वर्तमान में एक नमूना आउटपुट है:

Contact Health Services

    962-8328
    962-8945 

Emergency only: 962-8884
After hours, contact Security Dispatch to connect with Health Services staff on duty.

E-mail: health@mydomain.org

Address: 
123 Main St.

(MAP)

Opening Hours:
Sunday -Thursday     08:00 -17:30
2
Alex 14 अगस्त 2011, 12:11

1 उत्तर

सबसे बढ़िया उत्तर

यह XPath बिना विशेषताओं के सभी span तत्व ढूंढेगा:

//span[not(@*)]

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

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="span[not(@*)]">
    <xsl:apply-templates/>
  </xsl:template>

</xsl:stylesheet>
2
Kirill Polishchuk 14 अगस्त 2011, 12:38
धन्यवाद, किरिल। आपने इसे देखने में इतना आसान बना दिया! क्या उपरोक्त के आउटपुट में अन्य एक्सएसएलटी करना संभव है? उदाहरण के लिए, यदि मुझे स्टाइल आदि लागू करने की आवश्यकता है। मेरे पास एक कस्टम टेम्पलेट है, तो क्या वह उपरोक्त कोड (क्लोजिंग स्टाइलशीट टैग के अंदर) के बाद जाएगा?
 – 
Alex
14 अगस्त 2011, 12:55
1
@ एलेक्स, आपका स्वागत है। क्या आप नमूना एक्सएमएल और नमूना आउटपुट एक्सएमएल प्रदान कर सकते हैं? (अपना प्रश्न अपडेट करें)
 – 
Kirill Polishchuk
14 अगस्त 2011, 12:58
1
@ एलेक्स, कृपया अधिक स्पष्ट रूप से समझाएं। मैं अभी भी आपका प्रश्न नहीं समझता।
 – 
Kirill Polishchuk
14 अगस्त 2011, 14:26
माफ़ करना। मूल रूप से, आपके द्वारा सुझाए गए परिवर्तनों के साथ, मेरी *.XSL फ़ाइल में पहले से मौजूद XSLT कहाँ जाएगा? क्या मैं आपके एक्सएसएलटी को अपने एक्सएसएलटी से पहले xsl:stylesheet टैग के अंदर सबसे ऊपर रखूंगा? मैं एक्सएसएलटी के लिए नौसिखिया हूँ इसलिए कृपया मेरी अज्ञानता को क्षमा करें :) धन्यवाद।
 – 
Alex
14 अगस्त 2011, 14:35
1
@ एलेक्स, ठीक है। माई एक्सएसएलटी: पहला टेम्प्लेट (match="@* | node()") किसी भी नोड (तत्व, विशेषता, आदि) से मेल खाएगा और इसे आउटपुट एक्सएमएल में कॉपी करेगा। यदि यह span बिना किसी विशेषता के तत्व पाता है तो दूसरा टेम्प्लेट (span[not(@*)]) लागू होगा, जो स्वयं तत्व की नकल नहीं करता है।
 – 
Kirill Polishchuk
14 अगस्त 2011, 14:47