XSLT Удалить родительский элемент, не затрагивая детей - PullRequest
0 голосов
/ 29 октября 2018

Ниже мой inputxml:

<?xml version="1.0" encoding="UTF-8"?>
<tag:dataList xmlns:tag="http://www.example.com/tempuri">
<Item>Data1</Item>
<Item>Data2</Item>
</tag:dataList>

А ниже мой xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tag="http://www.example.com/tempuri">
<xsl:output indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Item">
        <xsl:element name="tag:dataRef">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
</xsl:template>
</xsl:stylesheet>

Ответ, который я получаю от xslt:

<?xml version="1.0" encoding="UTF-8"?>
<tag:dataList xmlns:tag="http://www.example.com/tempuri">
<tag:dataRef>Data1</tag:dataRef>
<tag:dataRef>Data2</tag:dataRef>
</tag:dataList>

Но ответ, который я пытаюсь получить:

<?xml version="1.0" encoding="UTF-8"?>
<tag:dataList xmlns:tag="http://www.example.com/tempuri">
    <tag:dataRef>Data1</tag:dataRef>
</tag:dataList>
<tag:dataList xmlns:tag="http://www.example.com/tempuri">
    <tag:dataRef>Data2</tag:dataRef>
</tag:dataList>

Как мне добиться этого с помощью xslt?

Ждем ваших решений. Заранее спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Вы не создаете родительский элемент в шаблоне совпадения. Для желаемого вывода вам нужно сделать так:

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

    <xsl:output indent="yes" omit-xml-declaration="yes"/>

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

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

    <xsl:template match="tag:dataList">
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="Item">
        <tag:dataList xmlns:tag="http://www.example.com/tempuri">
            <xsl:element name="tag:dataRef">
                <xsl:apply-templates select="@*|node()"/>
            </xsl:element>
        </tag:dataList>
    </xsl:template>

</xsl:stylesheet>

ПРИМЕЧАНИЕ: Здесь у вас есть несколько родительских элементов, поэтому вам нужно обернуть все элементы внутри одного корневого элемента в соответствии со стандартом XML.

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