XSLT:混合具有相同ID的节点

时间:2019-10-18 12:25:52

标签: xslt xslt-1.0

我的xml具有相似的结构:

<Info>
<parents>
    <parent1>
        <id>1</id>
    </parent1>
    <parent2>
        <id>2</id>
    </parent2>
</parents>

<children>

    <child>
        <id>1</id>
        <parentID>
            1
        </parentID>
        <someInfoFromOneNode>
            qqq
        </someInfoFromOneNode>
    </child>
    <child>
        <id>1</id>
        <parentID>
            1
        </parentID>
        <someInfoFromAnOtherNode>
            qqq
        </someInfoFromAnOtherNode>
    </child>
    <child>
        <id>2</id>
        <parentID>
            2
        </parentID>
        <someInfoFromOneNode>
            qqq
        </someInfoFromOneNode>
    </child>
    <child>
        <id>2</id>
        <parentID>
            2
        </parentID>
        <someInfoFromAnOtherNode>
            qqq
        </someInfoFromAnOtherNode>
    </child>
</children>
</Info>

我需要使用该结构的xml:

<Info>

<parent>
    <id>1</id>
    <children>
        <chidl>
            <id>1</id>
            <someInfoFromOneNode>
                 qqq
            </someInfoFromOneNode>
            <someInfoFromAnOtherNode>
                  qqq
            </someInfoFromAnOtherNode>
        </chidl>
    </children>
</parent>
<parent>
    <id>2</id>
    <children>
        <chidl>
            <id>2</id>
             <someInfoFromOneNode>
                 qqq
            </someInfoFromOneNode>
            <someInfoFromAnOtherNode>
                  qqq
            </someInfoFromAnOtherNode>
        </chidl>
    </children>
</parent>

</Info>

因此,我需要收集一位父母的所有孩子,此外还需要收集与一位孩子有关的信息。我试图过滤像这样的孩子,并至少显示孩子的id(我保留parentId):

<children>
          <xsl:for-each select="/Info/children/child">
                  <xsl:if test="./price_groups_id = $parentId and not(./id = preceding-sibling::id)">
                          <child>
                              <id>
                                 <xsl:value-of select="./id"/>

                               </id
                          </child>
                   </xsl:if>
           </xsl:for-each>

 </children>

但是它仅按父ID过滤子对象并复制它们,因此当前结果是:

    <Info>

<parent>
    <id>1</id>
    <children>
        <child>
            <id>1</id>
        </child>
        <child>
            <id>1</id>
        </child>
    </children>
</parent>
<parent>
    <id>2</id>
    <children>
        <child>
            <id>2</id>
        </child>
        <child>
            <id>2</id>
        </child>
    </children>
</parent>

</Info>

我该如何检查先前的节点ID并对其进行过滤?

0 个答案:

没有答案