Преобразование XSLT учитывает дочерний элемент не со значением узла - PullRequest
0 голосов
/ 28 августа 2018

ниже - мой XML, который состоит из узлов.

<richtext >
<par def="3">
    paragraph value 1
    <run>
        <font style="underline" />run value 1
    </run>.
    paragraph value 2
    <run>
        <font style="underline" />run value 2
    </run>
    paragraph value 3
    <run>
        <font style="underline" />run value 2 <br /> run value on new line
    </run> 
   paragraph value 4
</par>
</richtext>

Я преобразую выше xml в html, используя ниже xslt. я новичок в xslt, пожалуйста, помогите мне.

 <xsl:template match="/">
  <div>
  <xsl:apply-templates select="richtext" />
</div>

<xsl:template name="richtext">
<xsl:apply-templates select="par" />
<xsl:apply-templates select="table" />

<xsl:template match="par">
<p>
  <xsl:if test="text()">
    <xsl:value-of disable-output-escaping="yes" select="text()" />
    <xsl:value-of disable-output-escaping="yes" select="*/following-sibling::text()" />
  </xsl:if>
  <xsl:if test="run">
    <xsl:apply-templates select="run" />
    <xsl:value-of disable-output-escaping="yes" select="run/following-sibling::text()" />
  </xsl:if>

</p>

<xsl:template match="run">
<span>
  <xsl:call-template name="style" />
  <xsl:value-of disable-output-escaping="yes" select="current()" />

</span>

я хочу ниже вывода html

<p>
    paragraph value 1
    <span style="underline">
        run value 1
    </span>.
    paragraph value 2
    <span style="underline">
        run value 2 <br /> run value on new line
    </span>
    paragraph value 3
    <span style="underline">
        run value 2
    </span> 

   paragraph value 4
</p>

Пожалуйста, смотрите обновленный вывод HTML. подскажите пожалуйста что делать? Я хочу сохранить стиль из XML. Изменить: если мы добавим
в XML, то я хочу текст после
на новой строке в HTML.

1 Ответ

0 голосов
/ 28 августа 2018

Похоже, вы хотите сделать следующее:

  1. Преобразование richtext в div
  2. Преобразование par в p
  3. Преобразование run в span
  4. Преобразовать font в атрибут

В этом случае серия простых шаблонов должна это сделать.

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />

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

<xsl:template match="richtext">
  <div>
     <xsl:apply-templates select="par|table" />
   </div>
</xsl:template>

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

<xsl:template match="run">
  <span>
    <xsl:call-template name="style" />
    <xsl:apply-templates />  
  </span>
</xsl:template>

<xsl:template match="font" />

<xsl:template name="style">
  <xsl:attribute name="style">
    <xsl:for-each select="font">
      <xsl:if test="position() > 1">; </xsl:if>
      <xsl:value-of select="@style" />
    </xsl:for-each>
  </xsl:attribute>
</xsl:template>

</xsl:stylesheet>

Обратите внимание, что шаблон, соответствующий "шрифт", здесь на самом деле не нужен. Поскольку элементы font в вашем примере не имеют дочерних элементов, вы можете опустить шаблон, поскольку встроенные шаблоны просто пропустят его и ничего не выведут.

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