Застрял с XSLT - PullRequest
       3

Застрял с XSLT

1 голос
/ 12 октября 2010

Я новичок в xslt, и теперь я немного застрял с ним.

У меня есть XML:

<map>
  <node TEXT="test" TYPE="node" >
    <element/>
    <node TYPE="normal" >
      <dummy>
        <FONT>
          mindmap_node1_l1
        </FONT>
      </dummy>
      <node LINK="url.com" TYPE="node" >
        <dummy>
          <FONT> 
            node node1_l2)
          </FONT>
        </dummy>
        <element/>
        <element/>
      </node>
    </node>
    <node TYPE="normal" >
      <dummy>
        <FONT>
          mindmap_node2_l1
        </FONT>
      </dummy>
      <node TYPE="normal" >
        <dummy>
          <FONT>
            mindmap_node3_l2
          </FONT>
        </dummy>
      </node>
    </node>
  </node>
</map>

Я хочу преобразовать что-то вроде этого:

<?xml version="1.0"?>
<transform text="">
  <transform text="mindmap_node1_l1">
    <transform text="node node1_l2)">
    </transform>
  </transform>
  <transform text="mindmap_node2_l1">
    <transform text="mindmap_node3_l2">
    </transform>
  </transform>
</transform>

Я написал xslt:

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

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

  <xsl:template match="node">
    <xsl:element name="transform">
      <xsl:attribute name="text">
        <xsl:value-of select="normalize-space(.)"/>
      </xsl:attribute>
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Но он действительно не делает то, что я хочу. Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Более компактная таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="text()"/>
    <xsl:template match="node">
        <transform text="{normalize-space(dummy/FONT)}">
            <xsl:apply-templates />
        </transform>
    </xsl:template>
</xsl:stylesheet>

Выход:

<transform text="">
    <transform text="mindmap_node1_l1">
        <transform text="node node1_l2)">
        </transform>
    </transform>
    <transform text="mindmap_node2_l1">
        <transform text="mindmap_node3_l2">
        </transform>
    </transform>
</transform>
1 голос
/ 12 октября 2010

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="map">
    <xsl:apply-templates select="/map/node"/>
  </xsl:template>

  <xsl:template match="node">
    <xsl:element name="transform">
      <xsl:attribute name="text">
        <xsl:value-of select="normalize-space(dummy/FONT)"/>
      </xsl:attribute>
      <xsl:apply-templates select="node"/>
    </xsl:element>
  </xsl:template>

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