Как извлечь childelement из родительского тега во вложенном xml через xslt? - PullRequest
0 голосов
/ 25 января 2019

Как извлечь childelement из родительского тега во вложенном xml через xslt. У него есть два тега с одинаковым именем, и я хочу разделить его на два разных тега.

Мой xml похож на:

<div>
    <title> Additional info </title>
    <h2> heading </h2>
    <div>
    <title> click info </title>
    </div>
</div>

вывод должен быть:

<section>
    <title> Additional info </title>
    <h2> heading </h2>
</section>
<section>
    <title> click info </title>
</section>

мой код xslt:

    <xsl:template match="content/body//div">
    <xsl:choose>
        <xsl:when test="div">
        <xsl:apply-templates/>
        </xsl:when>
            <xsl:otherwise>
            <section>
                <xsl:apply-templates/>
            </section>
            </xsl:otherwise>
            </xsl:choose>
        </xsl:template>


    <xsl:template match="content/body/section/div">
        <xsl:apply-templates select ="./node()"/>
    </xsl:template>

используя это, я получаю вывод:

    <title> Additional info </title>
            <h2> heading </h2>
        <section>
            <title> click info </title>
        </section>

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Спасибо за вашу помощь !!теперь он работает с использованием кода ниже

    <xsl:for-each select='$list'>
        <xsl:element name='section'>
            <xsl:apply-templates select='*[not(name(.)="div")]'/>

        </xsl:element>
    </xsl:for-each>

0 голосов
/ 28 января 2019

Вот обновление для всех имен элементов, которые являются прямыми дочерними элементами.

<div>
    <title> Additional info </title>
    <h2> heading </h2>
    <div>
    <title> click info </title>
    </div>
    <div>
        <em>Release</em>
    </div>
</div>

и xsl

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

<xsl:variable name='list' select='//div'/>

<xsl:template match='/'>
    <div>
        <xsl:for-each select='$list'>
            <xsl:element name='select'>
                <xsl:copy-of select='*[not(name(.)="div")]'/>
            </xsl:element>
        </xsl:for-each>
    </div>
</xsl:template>
</xsl:stylesheet>

Выходы

<div>
  <select>
    <title>Additional info</title>

    <h2>heading</h2>
  </select>

  <select>
    <title>click info</title>
  </select>

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