搜索元素并采取行动

时间:2017-12-16 02:55:12

标签: xslt xslt-1.0 xslt-2.0

猜猜你们都做得很好!!

我有一个场景需要执行以下操作:

我的xml内容如下。

`<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c>
            <key>One</key>
            <value>Value1</value>
        </c>
        <c>
            <key>Two</key>
            <value>Value2</value>
        </c>
        <c>
            <key>Three</key>
            <value>Value3</value>
        </c>
        <c>
            <key>Four</key>
            <value>Value4</value>
        </c>
        <c>
            <key>Five</key>
            <value>Value5</value>
        </c>
    </b>
   <d>
       <e>
            <Five>Check this feild</Five>
            <Seven>It is extra</Seven>
            <tewnty>extra</tewnty>
        </e>
        <f>
            <Three>it is present</Three>
            <Five>Came again</Five>
        </f>
        <g>
            <Four>It is here</Four>
        </g>
    </d>
    <n>
        <Five>Dont check under n</Five>
        <Six>Extra under n</Six>
        <Three>Dont check under n</Three>
    </n>
</a>`

现在我想检查/a/b/c/key/text()是否作为元素名称存在     /a/d

如果为true,则复制当前键/值对。 如果不忽略此键/值对要输出。

所以我的输出应该是这样的:

`<?xml version="1.0" encoding="UTF-8" ?>
<a>
    <b>
        <c>
            <key>Three</key>
            <value>Value3</value>
        </c>
        <c>
            <key>Four</key>
            <value>Value4</value>
        </c>
        <c>
            <key>Five</key>
            <value>Value5</value>
        </c>
    </b>
    <d>
        <e>
            <Five>Check this feild</Five>
            <Seven>It is extra</Seven>
            <tewnty>extra</tewnty>
        </e>
        <f>
            <Three>it is present</Three>
            <Five>Came again</Five>
        </f>
        <g>
            <Four>It is here</Four>
        </g>
    </d>
    <n>
        <Five>Dont check under n</Five>
        <Six>Extra under n</Six>
        <Three>Dont check under n</Three>
    </n>
</a>`

你能帮我解决一下XSLT吗?

我正在尝试使用if并检查local-name()节点。

如何在XSLT中实现它?

我的问题是,我如何根据元素名称=(c / key / text())删除一个节点(在我的情况下是somevaluesomevalue)。

我希望我的问题具体。

谢谢&amp;问候 Chandru

1 个答案:

答案 0 :(得分:1)

以下样式表使用/a/d/*/*local-name()下的元素使用/a/b/*使用xsl:key,然后将其用作条件,以排除text() xsl:key下的元素值未在xsl:key中找到任何项目。

这是一个经过修改的identity transformation,其中默认处理是保留所有内容。与使用<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" /> <xsl:key name="filter" match="/a/d/*/*" use="local-name()"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/a/b/c[not(key('filter', key/text()))]"/> </xsl:stylesheet> 的第二个空模板匹配的元素可确保删除这些元素。

<a *ngIf="routePart === '' " [routerLink]="Create" />

<a *ngIf="routePart === 'xyz' " [routerLink]="xyz/Create" />