Как удалить шаблоны с помощью xslt? - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь отобразить xml-файл, используя xslt.В некоторых узлах у меня есть данные между тегом <code>.Я не хочу, чтобы отображался тег кода.

, так как удалить только теги <code> и , используя xslt.

Я попробовал translate (), но он рассматривает шаблон как отдельные символы, и поэтому все c, o, d, e также удаляются из содержимого XML.

вот примерXML-данные:

  <results>
  <result>
     <resultType>Error</resultType>
     <lineNum>3</lineNum>
     <columnNum>1</columnNum>
     <errorMsg>&lt;code&gt;script&lt;/code&gt; may cause screen flicker.&lt;</errorMsg>
   </result> 
   <result>   
    <resultType>Potential Problem</resultType>
    <lineNum>6</lineNum>
    <columnNum>2</columnNum>
    <errorMsg>&lt;code&gt;script&lt;/code&gt; user interface may not be accessible.&lt;
  </errorMsg>
 </result> 
 </results>

Мой xslt:

    <table>
     <tr class="header">
      <th>Serial Number</th>
      <th>Line Number</th>
      <th>Error Message</th>
      <th>Decision Pass</th>

     </tr>
     <xsl:for-each select="results/result">
      <xsl:if test="resultType='Potential Problem'">
        <xsl:variable name="eMsg" select="errorMsg"></xsl:variable>
        <tr class="content">  

            <td><xsl:number format="1"/></td>

            <td><xsl:value-of select="lineNum"/></td>

            <td><xsl:value-of select="errorMsg" disable-output-escaping="yes"/></td>

        </tr>
      </xsl:if> 
    </xsl:for-each>
  </table>

disable-output-escaping = "yes" не работает с Firefox, поэтому при попытке удалить <code>, тегов

1 Ответ

1 голос
/ 05 января 2012

Если бы вы хотели избавиться от фактического элемента XML, вы бы использовали что-то вроде этого:

<xsl:template match="code">
  <xsl:apply-templates/>
</xsl:template>

(при условии, что у вас есть шаблон идентификации, который копирует все остальное:

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

)

Однако похоже, что у вас есть текст, который вы хотите удалить. В этом случае xsl: analysis-string, вероятно, то, что вам нужно:

<xsl:template match="errorMsg/text()">
  <xsl:analyze-string select="." regex="&amp;lt;code$amp;gt;(.*)&amp;lt;/code$amp;gt;">
    <xsl:matching-substring><xsl:value-of select="regex-group(1)"/></xsl:matching-substring>
    <xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

Некоторые другие советы и мнения: если вы используете для каждого, когда вы можете использовать шаблон, вы должны рассмотреть последний. Отключение-выход-выход - это дьявол, и его следует избегать в 99% случаев (или более).

Надеюсь, что это делает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...