преобразование XML в HTML - PullRequest
       1

преобразование XML в HTML

1 голос
/ 15 февраля 2011

Я пытаюсь преобразовать XML-документ в HTML.Locgic прост, что все узлы, включая childnode, будут отображаться по порядку.Немногие из узлов содержат html-теги, и я хочу сохранить их как есть, чтобы форматирование работало в html.

, поэтому у меня есть XML-файл:

       <?xml version="1.0" encoding="UTF-8"?>
           <para class="para">
                <table style="1">
                  <col width="50*"/>
                  <col align="right" width="25*"/>
                  <col align="right" width="25*"/>
                  <thead>
                    <tr>
                      <th>
                        <text class="text">xyz</text>
                      </th>
                      <th>
                        <text class="text">Abc</text>
                      </th>
                     </tr>
                  </thead>
                  <tr>
                    <td>
                      <text class="text">2,000 Common</text>
                    </td>
                    <td>
                      <text class="text">($200.00)</text>
                    </td>
                    </tr>
                </table>
               </para>
           <para class="para">
               <div>Some Text 
                   <product><b>this should be in bold</b></product>
              </div>
            </para>

Я написалскрипт xsl:

<xsl:template name="para" >
<xsl:for-each select="child::text()|child::node()" >
  <xsl:if test ="node()">
    <xsl:if test="text()">
              <xsl:value-of select="text()"/>
          <br/>
          <br/>
      </xsl:if>
    <xsl:call-template name="para"></xsl:call-template>
  </xsl:if>
</xsl:for-each>

Проблема здесь в том, что он также рассматривает теги html как узлы и отрисовывает значения внутри тегов thoes.Где, как я хочу, чтобы сохранить эти теги в выводе HTML.Родительский узел «para» может иметь номера дочерних узлов и подузлов, поэтому ему не нужно общее решение.Вывод должен быть

        <table>
        <tr>
        <td>
        xyz
        </td>
        <td>
        abc
        </td>
        </tr>
        <tr>
        <td>
         2,000 Common      
        </td>
        <td>
        ($200.00)
        </td>
        </tr>
       </table>

       Some Text 

       **this should be in bold**

Спасибо

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Это преобразование:

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

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

 <xsl:template match="t|para|col|text|product">
  <xsl:apply-templates/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML (обернутому в верхний элемент, чтобы сделать его правильно сформированным):

<t>
    <para class="para">
        <table style="1">
            <col width="50*"/>
            <col align="right" width="25*"/>
            <col align="right" width="25*"/>
            <thead>
                <tr>
                    <th>
                        <text class="text">xyz</text>
                    </th>
                    <th>
                        <text class="text">Abc</text>
                    </th>
                </tr>
            </thead>
            <tr>
                <td>
                    <text class="text">2,000 Common</text>
                </td>
                <td>
                    <text class="text">($200.00)</text>
                </td>
            </tr>
        </table>
    </para>
    <para class="para">
        <div>Some Text                     
            <product>
                <b>this should be in bold</b>
            </product>
        </div>
    </para>
</t>

дает требуемый, правильный результат:

<table style="1">
    <thead>
        <tr>
            <th>xyz</th>
            <th>Abc</th>
        </tr>
    </thead>
    <tr>
        <td>2,000 Common</td>
        <td>($200.00)</td>
    </tr>
</table>
<div>Some Text                     
            <b>this should be in bold</b>
</div>

Объяснение : Это простое применение "переопределения правила идентификации"«Шаблон дизайна.

1 голос
/ 15 февраля 2011

Если вы хотите, чтобы HTML проходил как есть, вам следует рассмотреть возможность помещения их в отдельное пространство имен от остальной части XML. W3C даже определяет набор пространств имен для различных версий (X) HTML, которые вы можете использовать для этого.

0 голосов
/ 15 февраля 2011

Вы можете использовать пространства имен - создайте пространство имен и поместите все не-HTML-узлы в это пространство имен.

Чем в xslt выбирать только узлы из заданного пространства имен - это позволит вашим HTML-тегам рассматриваться как текст.

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