簡體   English   中英

使用XSL解析XML內的標簽

[英]Parse tags inside XML with XSL

我有這樣的xml:

<node>
    <par>
        Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
    <par>
</node>

我必須打印這樣的html:

<p>
    <span>Lorem ipsum dolor</span>
    <span class="bolder">sit</span>
    <span>amet, consectetur adipiscing elit.</span>
</p>

我找不到通過中間的bold標簽截斷文本並添加新標簽的方法

將以下轉換應用於您提供的輸入時,將產生您請求的結果。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
    </xsl:template>

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

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

    <xsl:template match="par/text()">
        <span><xsl:copy-of select="." /></span>
    </xsl:template>

    <xsl:template match="bold">
        <span class="bolder"><xsl:value-of select="." /></span>
    </xsl:template>
</xsl:transform>

以下XSLT樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
  <xsl:strip-space elements="*"/>

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

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

  <xsl:template match="text()">
    <span>
      <xsl:value-of select="normalize-space(.)"/>
    </span>
  </xsl:template>

  <xsl:template match="bold/text()">
    <span class="bolder">
      <xsl:value-of select="normalize-space(.)"/>
    </span>
  </xsl:template>

</xsl:stylesheet>

應用於此輸入XML時:

<node>
  <par>
    Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
  </par>
</node>

產生以下輸出:

<p>
  <span>Lorem ipsum dolor</span>
  <span class="bolder">sit</span>
  <span>amet, consectetur adipiscing elit.</span>
</p>

您可以通過使用text()選擇器並在內部元素的任一側對其進行索引來實現所需的功能。 因此,在par上下文中, 'Lorem ipsum dolor'的選擇器將是text()[1]'amet, consectetur adipiscing elit.' 將是text()[2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM