XSLT - как отобразить первое слово абзаца как жирный - PullRequest
1 голос
/ 14 октября 2011

Я не могу этого сделать. Я использую XML-файл, который будет преобразован в HTML с помощью XSLT. Пример XML-файла будет выглядеть следующим образом ...

<name>ABC</name>
<dob>09-Jan-1973</dob>
..
..
<info>My name is ABC. I am working with XYZ Ltd.

I have an experience of 5 years.

I have been working on Java platform since 5 years.
</info>

Информационный тег содержит информацию в форме абзацев. Я хочу, чтобы первое слово выделено жирным шрифтом. Ниже будет вывод HTML, только для информационного тега.

<b>My</b> name is ABC. I am working with XYZ Ltd.

<b>I</b> have an...

<b>I</b> have been working....

Хорошего дня John

Ответы [ 3 ]

0 голосов
/ 14 октября 2011

я бы работал с методами подстроки .., что-то вроде этого

<xsl:template match="info" mode="parapgrah">
  <b><xsl:value-of select="substring-before(text(), ' ')" /></b><xsl:value-of select="substring-after(text(), ' ')" />
</xsl:template>

ups - это заменит только первый случай .. вам нужно будет добавить foreach для каждого 'абзаца'

0 голосов
/ 14 октября 2011

Это преобразование (XSLT 2.0):

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

 <xsl:template match="info">
  <xsl:variable name="vParas" select="tokenize(.,'&#xA;')[normalize-space()]"/>

   <xsl:for-each select="$vParas">
    <xsl:variable name="vHead" select=
        "tokenize(., '[\s.?!,;:\-]+')[.][1]"/>
    <b>
      <xsl:sequence select="$vHead"/>
    </b>
    <xsl:sequence select="substring-after(., $vHead)"/>
    <xsl:sequence select="'&#xA;&#xA;'"/>
     </xsl:for-each>
 </xsl:template>

 <xsl:template match="text()"/>
</xsl:stylesheet>

при применении к предоставленному входу (преобразовано в хорошо сформированный XML-документ):

<t>
    <name>ABC</name>
    <dob>09-Jan-1973</dob> .. .. 
    <info>My name is ABC.

    I am working with XYZ Ltd.

    I have an experience of 5 years.

    I have been working on Java platform since 5 years. </info>
</t>

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

<b>My</b> name is ABC. 

<b>I</b> am working with XYZ Ltd. 

<b>I</b> have an experience of 5 years. 

<b>I</b> have been working on Java platform since 5 years.

И это отображается в браузере, как и ожидалось:


My зовут ABC.

Я работаю с XYZ Ltd.

Я опыт работы 5 лет.

I работает на платформе Java уже 5 лет.


Возможно также решение XSLT 1.0, немного более сложное.

Пояснение : Использование стандартной функции XPath 2.0 tokenize() и стандартных функций XPath normalize-space() и substring-after().

0 голосов
/ 14 октября 2011

Попробуйте использовать свойство псевдоэлемента в css

p:first-letter
{
font-weight: bold;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...