代码之家  ›  专栏  ›  技术社区  ›  Paolo Tedesco

处理包含内部转义XML的节点

  •  3
  • Paolo Tedesco  · 技术社区  · 15 年前

    我有一个XML文档,其中一个节点包含另一个对象的转义XML序列化,如下例所示:

    <attribute>
      <value>
        &lt;map&gt;
          &lt;item&gt;
            &lt;src&gt;something&lt;/src&gt;
            &lt;dest&gt;something else&lt;/dest&gt;
          &lt;/item&gt;
        &lt;/map&gt;  
      </value>
    </attribute>  
    

    如何将xslt模板应用于内部xml?特别是,我想得到一个带有src/dest的html表:

    | src       | dest           |
    | something | something else |  
    
    2 回复  |  直到 13 年前
        1
  •  7
  •   Tomalak    15 年前

    我会将此作为两步操作来完成。

    步骤1.xsl:

    <xsl:stylesheet 
      version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    >
      <xsl:template match="/">
        <root>
          <xsl:apply-templates select="attribute/value" />
        </root>
      </xsl:template>
    
      <xsl:template match="value">
        <object>
          <xsl:value-of select="." disable-output-escaping="yes" />
        </object>
      </xsl:template>
    </xsl:stylesheet>
    

    <root>
      <object>
        <map>
          <item>
            <src>something</src>
            <dest>something else</dest>
          </item>
        </map>
      </object>
    </root>
    

    步骤2.xsl

    <xsl:stylesheet 
      version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    >
      <xsl:template match="object">
        <table>
          <tr>
            <xsl:for-each select="map/item/*">
              <th>
                <xsl:value-of select="name()" />
              </th>
            </xsl:for-each>
          </tr>
          <tr>
            <xsl:for-each select="map/item/*">
              <td>
                <xsl:value-of select="." />
              </td>
            </xsl:for-each>
          </tr>
        </table>
      </xsl:template>
    </xsl:stylesheet>
    

    生成HTML表的步骤

    <table>
      <tr>
        <th>src</th>
        <th>dest</th>
      </tr>
      <tr>
        <td>something</td>
        <td>something else</td>
      </tr>
    </table>
    
        2
  •  1
  •   Oded    15 年前

    提取 value 属性转换为它自己的XML文档,并进行转换。

    如果可以控制XML文档的格式,请考虑将节点数据放入 CDATA