0

对某些人来说,这似乎是一个简单的问题,但对我来说,这已经过了几天了。

我想更改此 XML:

<?xml version="1.0" encoding="UTF-8"?>
<questionnaire>
  <Id>questionnaireId</Id>
  <Desc>questionnnaireDesc here</Desc>
  <QuestParts>
    <part>
      <partNumber>1</partNumber>
      <questItems>
         <item>
              <itemId>1</itemId>
              <itemText>The first item</itemText>
         </item>
      </questItems>
    </part>
    <part>
      <partNumber>1</partNumber>
      <questItems>
         <item>
              <itemId>2</itemId>
              <itemText>The second item</itemText>
         </item>
      </questItems>
    </part>
    <part>
      <partNumber>2</partNumber>
      <questItems>
         <item>
              <itemId>3</itemId>
              <itemText>A third item, but inside part 2</itemText>
         </item>
      </questItems>
    </part>
    <part>
      <partNumber>2</partNumber>
      <questItems>
         <item>
              <itemId>4</itemId>
              <itemText>A fourth item, but inside part 2</itemText>
         </item>
      </questItems>
    </part>
  </QuestParts>
</questionnaire>

对此:

<questionnaire>
  <Id>questionnaireId</Id>
  <Desc>questionnnaireDesc here</Desc>
  <QuestParts>
    <part>
      <partNumber>1</partNumber>
      <questItems>
         <item>
              <itemId>1</itemId>
              <itemText>The first item</itemText>
         </item>
         <item>
              <itemId>2</itemId>
              <itemText>The second item</itemText>
         </item>
      </questItems>
    </part>
    <part>
      <partNumber>2</partNumber>
      <questItems>
         <item>
              <itemId>3</itemId>
              <itemText>A third item, but inside part 2</itemText>
         </item>
         <item>
              <itemId>4</itemId>
              <itemText>A fourth item, but inside part 2</itemText>
         </item>
      </questItems>
    </part>
  </QuestParts>
</questionnaire>

换句话说,我只是想删除重复的元素并将属于该部分的所有项目分组到该部分的元素中。

我已经尝试了很多方法,虽然有很多例子,但我找不到任何真正适合我的东西,我想避免再花 2 天时间来解决别人会在 5 分钟内解决的问题。

非常感谢您的帮助。

格雷格

4

1 回答 1

0

格雷格,

通过示例提供的链接,我设法使其与以下 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="partnr" match="part" use="partNumber" />

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

    <xsl:template match="QuestParts">
        <QuestParts>
            <xsl:for-each select="part[generate-id(.)=generate-id(key('partnr',partNumber))]">
                <xsl:variable name="curpartnr" select="partNumber" />
                <partNumber><xsl:value-of select="$curpartnr" /></partNumber>

                <questItems>
                    <xsl:for-each select="../part[generate-id(.)=generate-id(key('partnr',partNumber))]/questItems/item">
                         <item>
                              <itemId><xsl:value-of select="itemId" /></itemId>
                              <itemText><xsl:value-of select="itemText" /></itemText>
                         </item>
                    </xsl:for-each>
                </questItems>
            </xsl:for-each>
        </QuestParts>
    </xsl:template>
</xsl:stylesheet>

希望能帮助到你。

于 2013-02-20T22:31:30.540 回答