Самый простой способ вывода одного тега XML в тег HTML - PullRequest
0 голосов
/ 20 марта 2012

Есть ли простой способ отформатировать этот единственный heading и превратить эти теги заголовков в теги h3 в XSLT?

<webpage>
  <heading>Header</heading>
  <p> paragraph <a href="http://www.google.com">google</a> more paragraph</p>
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
    <li>item6</li>
  </ul> 
  <p>more paragraph<a href="http://www.potato.com">potato.com</a></p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <heading>heading</heading>
  <p> here comes a list:</p>
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
  </ul>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>

</webpage>

Цель состоит в том, чтобы превратить это в это

  <h3>Header</h3>
  <p> paragraph <a href="http://www.google.com">google</a> more paragraph</p>
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
    <li>item6</li>
  </ul> 
  <p>more paragraph<a href="http://www.potato.com">potato.com</a></p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <h3>heading</h3>
  <p> here comes a list:</p>
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
  </ul>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>
  <p>more paragraph</p>

Кажется, что это должно работать, но это не так:

  <xsl:variable name="webpage" select="document('webpage.xml')/webpage">
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="/webpage/heading">
      <h3>
        <xsl:value-of select="."/>
      </h3>
    </xsl:template>    
  </xsl:variable>

1 Ответ

1 голос
/ 20 марта 2012

Попробуйте это:

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

    <xsl:variable name="webpage" select="document('webpage.xml')/webpage"/>

    <!-- No input document - so we set the initial template to start when we call the transform --> 
    <xsl:template name="start">
        <xsl:apply-templates select="$webpage/@*|$webpage/node()"/>
    </xsl:template>

    <!-- This template is the identity transform and will copy everything from the input to the output unless there a template that is a better match -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- This template overrides the identity transform and changes the heading to an h3 -->
    <xsl:template match="/webpage/heading">
        <h3><xsl:value-of select="."/></h3>
    </xsl:template>

</xsl:stylesheet>

при применении к предоставленному вводу xml выдает:

<?xml version="1.0" encoding="UTF-8"?><webpage>
    <h3>Header</h3>
    <p> paragraph <a href="http://www.google.com">google</a> more paragraph</p>
    <ul>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
        <li>item4</li>
        <li>item5</li>
        <li>item6</li>
    </ul> 
    <p>more paragraph<a href="http://www.potato.com">potato.com</a></p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <h3>heading</h3>
    <p> here comes a list:</p>
    <ul>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
    </ul>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>
    <p>more paragraph</p>

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