2011-08-14 17 views
2

XSLTでは特定のタグを見つけてその内容に置き換えることは可能ですか?たとえば、このXMLを与えられた:XSLT - 特定のタグを検索して見つける

<span>Hello world</span> 

我々はこれで終わるだろう:

Hello world 

ので役に立たないと冗長SPANタグは任意のレベル(再帰的に)で、その内容に置き換えられます。私たちは、 "裸の"スパンタグ(属性のないスパンタグ)を見つけて、その内容で置き換えることを望みます。

私は制御できないXMLを処理しています。ありがとう。

アップデート:ここではサンプル出力に続いて、* .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: [email protected] 

Address: 
123 Main St. 

(MAP) 

Opening Hours: 
Sunday -Thursday  08:00 -17:30 

答えて

2

この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> 
+0

ありがとう、Kirill。あなたはそれをとても簡単に見せます!上記の出力に他のXSLTを行うことは可能ですか?例えば、私がスタイリングなどを適用する必要がある場合、私はカスタムテンプレートを持っています、上記のコードの後に​​行くでしょうか? – Alex

+1

@Alex、よろしいですか?サンプルXMLとサンプル出力XMLを提供できますか? (あなたの質問を更新してください) –

+0

キリル、上記の更新された質問をご覧ください。ありがとう。 – Alex

関連する問題