XSLT-1.0 Как редактировать данные элементов тега - PullRequest
0 голосов
/ 14 сентября 2018

Я использую xsl для преобразования xml в xml.Не могли бы вы помочь мне написать код XSL для преобразования ввода в вывод?Мне нужны данные в виде форматированных текстовых данных в CDATA для первых двух тегов.Заранее спасибо.

Примечание: у меня есть решение от Martin @ XSLT-1.0 Как выбрать несколько тегов между двумя похожими тегами, как есть? , но теперь мне нужно отредактировать значение.Как это сделать?Пожалуйста, помогите.

Ввод:

<ATTRIBUTE-VALUE>
    <THE-VALUE>
        <div xmlns="http://www.w3.org/1999/xhtml">
            <h1 dir="ltr" id="_1536217498885">Main Description</h1>
            <p>Line1 The main description text goes here.</p>
            <p>Line2 The main description text goes here.</p>
            <p>**<img alt="Embedded Image" class="embeddedImageLink" id="_1536739954166" src="_9c3778a0-d596-4eef-85fa-052a5e1b2166?accept=none&amp;private"/>**</p>
            <h1 dir="ltr" id="_1536217498886">Key Consideration</h1>
            <p>Line1 The key consideration text goes here.</p>
            <p>Line2 The key consideration text goes here.</p>
            <h1 dir="ltr" id="_1536217498887">Skills</h1>
            <p>Line1 The Skills text goes here.</p>
            <p>Line2 The Skills text goes here.</p>
            <p>Line3 The Skills text goes here.</p>
            <h1 dir="ltr" id="_1536217498888">Synonyms</h1>
            <p>The Synonyms text goes here.</p>
        </div>
    </THE-VALUE>
</ATTRIBUTE-VALUE>

Ввод:

<MainDescription>
    <![CDATA[
        <p>Line1 The main description text goes here.</p>
        <p>Line2 The main description text goes here.</p>
        <p>**<img alt="Embedded Image" class="embeddedImageLink" id="_1536739954166" src="_9c3778a0-d596-4eef-85fa-052a5e1b2166.jpg"/>**</p>
    ]]>
</MainDescription>
<KeyConsiderations>
    <![CDATA[
        <p>Line1 The key consideration text goes here.</p>
        <p>Line2 The key consideration text goes here.</p>
    ]]>
</KeyConsiderations>
<Skills>
    <p>Line1 The Skills text goes here.</p>
    <p>Line2 The Skills text goes here.</p>
    <p>Line3 The Skills text goes here.</p>
</Skills>
<Synonyms>
    <p>The Synonyms text goes here.</p>
</Synonyms>

1 Ответ

0 голосов
/ 14 сентября 2018

Если вам нужны только первые два тега как CData, просто добавьте этот шаблон к вашему XSLT

<xsl:template match="xhtml:h1[position() > 2]">
  <xsl:element name="{translate(., ' ', '')}">
    <xsl:apply-templates select="key('h1-group', generate-id())"/>
  </xsl:element>
</xsl:template>  

Или, если под «первыми двумя тегами» вы подразумеваете просто «MainDescription» и «KeyConsideration»,вместо этого попробуйте этот шаблон ....

<xsl:template match="xhtml:h1[. != 'Main Description' and . != 'Key Consideration']">
  <xsl:element name="{translate(., ' ', '')}">
    <xsl:apply-templates select="key('h1-group', generate-id())"/>
  </xsl:element>
</xsl:template>  

РЕДАКТИРОВАТЬ: Если вы хотите также "отредактировать" один из дочерних узлов, просто добавьте шаблон для элемента или атрибута, который вы хотите изменить.Для каждого из них, чтобы изменить атрибут src для img, сделайте это

<xsl:template match="xhtml:p/xhtml:img/@src">
  <xsl:attribute name="src">
    <xsl:value-of select="concat(substring-before(., '?'), '.jpg')" />
  </xsl:attribute>
</xsl:template>

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

...