获取Xsl中的唯一记录并使用转换后的XML中的值

时间:2014-08-08 11:55:58

标签: xml xslt xpath transformation

我有一个类似于以下结构的输入XML:

<request>
  <X>
    <Y>
        ...
        <Cid>1</Cid>
        <Sid>2</Sid>
        <Pid>
            <A1>
                ..
            </A1>
        </Pid>
    </Y>
  </X>
</request>
<request>
  <X>
    <Y>
        ...
        <Cid>1</Cid>
        <Sid>3</Sid>
        <Pid>
            <A1>
                ..
            </A1>
        </Pid>
    </Y>
  </X>
</request>
<request>
  <X>
    <Y>
        ...
        <Cid>1</Cid>
        <Sid>2</Sid>
        <Pid>
            <A1>
                ..
            </A1>
        </Pid>
    </Y>
  </X>
</request>
<request>
  <X>
    <Y>
        ...
        <Cid>2</Cid>
        <Sid>2</Sid>
        <Pid>
            <A1>
                ..
            </A1>
        </Pid>
    </Y>
  </X>
</request>

我必须在转换后的XML顶部提取一些[Cid和Sid]的唯一Id组合。其余数据(从Pid,A1,Y等获取)将被转换并放在otherDtls节点之后,该节点在创建所有Id之后出现。输出将如下所示:

<Id>
        <Id1>2</Id1>
        <Id2>1</Id2>
</Id>
<Id>
        <Id1>3</Id1>
        <Id2>1</Id2>
</Id>
<Id>
        <Id1>2</Id1>
        <Id2>2</Id2>
</Id>
<otherDtls>
    .....
<otherDtls>

请注意[Cid值&#39; 1&#39; AND Sid值&#39; 2&#39;]组合是重复的,因此它只在转换后的XML中出现一次。 此外,请注意Cid值在Id2中,Sid值在Id1中。我无法找到任何有用的解决方案来提取[Cid和Sid]的唯一Id组合,并获取值以更改标签名称并在顶部打印。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这是grouping problem,使用连接CidSid的分组键,例如<xsl:key name="group" match="Y" use="concat(Cid, '|', Sid)"/>