XSLT: заменить элемент / узел без исходного текста узла - PullRequest
0 голосов
/ 01 ноября 2018

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

Учитывая этот XML:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country><font size='8pt' name='Verdana' color='navy'/>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>

Я пытаюсь получить ожидаемый результат (без США):

<div>
    <b>Empire Burlesque</b>
    <p>
        <i>
            <a href="wwww.google.com.au">GOOGLE </a>
        </i>
    </p>
</div>

Но вместо этого я получаю ниже дополнительный текст "США".

<div>
    <b>Empire Burlesque</b>
    <p>
        <i>
            <a href="wwww.google.com.au">GOOGLE </a>
        </i>USA
    </p>
</div>

Это XSLT, который я написал

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

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>  
  <xsl:apply-templates/>  
  </body>
  </html>
</xsl:template>

<xsl:template match="cd">
  <div>
    <xsl:apply-templates select="title"/>  
   <xsl:apply-templates select="country"/>
  </div>
</xsl:template>

<xsl:template match="country">
<p>
<xsl:call-template name="replacement">
<xsl:with-param name="txt" select="."/>
</xsl:call-template>

<xsl:apply-templates/>
</p>
</xsl:template>

<xsl:template name="replacement">
<i><a href="wwww.google.com.au">GOOGLE </a> </i>
</xsl:template>

<xsl:template match="title">
  <b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>

Может кто-нибудь дать мне несколько советов о том, как получить желаемый результат без текста США элемента страны?

Приветствия

1 Ответ

0 голосов
/ 01 ноября 2018

Ваш шаблон соответствует country включает инструкцию для:

<xsl:apply-templates/>

Это применяет шаблоны ко всем дочерним узлам country, включая текстовый узел "USA". У вас нет шаблонов, соответствующих text(), поэтому это обрабатывается встроенным правилом шаблонов , которое копирует текст в выходные данные.

Если вы не хотите, чтобы это происходило, удалите инструкцию xsl:apply-templates (или добавьте шаблон для обработки текстовых узлов по-другому).

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