Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT:提取唯一属性值_Xslt_Grouping - Fatal编程技术网

XSLT:提取唯一属性值

XSLT:提取唯一属性值,xslt,grouping,Xslt,Grouping,请帮忙,我是XSLT新手,我正在尝试将一种XML格式转换为另一种 我需要提取唯一的属性值,并将这些值转换为新格式。下面的示例XML显示了原始格式和新/目标格式 我花了很长时间试图做到这一点,却没有任何乐趣。有人能帮我一下或给我一些建议吗 原始格式: <base> <level> <level2 Name ="AA" value="1"/> </level> <level> <level2 Name ="

请帮忙,我是XSLT新手,我正在尝试将一种XML格式转换为另一种

我需要提取唯一的属性值,并将这些值转换为新格式。下面的示例XML显示了原始格式和新/目标格式

我花了很长时间试图做到这一点,却没有任何乐趣。有人能帮我一下或给我一些建议吗

原始格式:

<base>
  <level>
    <level2 Name ="AA" value="1"/>
  </level>
  <level>
    <level2 Name ="BB" value="2"/>
  </level>
  <level>
    <level2 Name ="BB" value="3"/>
  </level>
  <level>
    <level2 Name ="CC" value="4"/>
  </level>
  <level>
    <level2 Name ="AA" value="5"/>
  </level>
</base>

新格式:

<base>
  <levelNames>
    <level level2Name ="AA"/>
    <level level2Name ="BB"/>
    <level level2Name ="CC"/>
  </levelNames>
</base>

非常感谢。

这似乎又是丢失的一块


这是一个相当简单的问题,所以我将让您自己处理Muench。

请先创建xsl:key,然后您可以轻松使用下面的代码

xsl:key name=“levelName”match=“level2”use=“@name”


XSLT解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:key name="LevelDistint" match="level2" use="@Name"/>
    <xsl:template match="base">
        <base>
            <levelNames>
                <xsl:for-each select="level/level2[generate-id() = generate-id(key('LevelDistint', @Name)[1])]">
                    <level>
                        <xsl:attribute name="level2Name"><xsl:value-of select="normalize-space(@Name)"/></xsl:attribute>
                    </level>
                </xsl:for-each>
            </levelNames>
        </base>
    </xsl:template>
</xsl:stylesheet>

XSLT O/p:

<?xml version="1.0" encoding="UTF-8"?>
<base>
    <levelNames>
        <level level2Name="AA"/>
        <level level2Name="BB"/>
        <level level2Name="CC"/>
    </levelNames>
</base>


发布到目前为止您已经尝试过的XSLT,我们将提出建议。我对投票决定这一点和继续前进、发布解决方案并为此感到内疚感到矛盾。该死的-但是你怀疑这是家庭作业可能是对的,所以我不这么说。如果你做过一次,你就会知道这是多么容易。你只需要了解这个想法。对于大多数常见的XSLT问题,我真的建议首先看一看这里:@Boldewyn-是的,这是一个非常好的初学者资源,尽管很难看:)叹气,有人想解释一下否决票吗?是因为我没有为他做手术吗?
<?xml version="1.0" encoding="UTF-8"?>
<base>
    <levelNames>
        <level level2Name="AA"/>
        <level level2Name="BB"/>
        <level level2Name="CC"/>
    </levelNames>
</base>