Преобразуйте два узла в один, используя xslt - PullRequest
3 голосов
/ 17 июня 2011

У меня есть следующий ввод XML:

<data>
    <parent Id="1" value="ParentOne">
       <child x="1" y="2" />
    </parent>
    <parent Id="2" value="ParentTwo">
        <child x="3" y="4" />
    </parent>
</data>

То, что мне нужно вывести, должно выглядеть так, объединяя родительский и дочерний узлы:

<data>
    <combined Id="1" value="ParentOne" x="1" y="2" />
    <combined Id="2" value="ParentTwo" x="3" y="4" />
</data>

Как этого добиться, используяXSLT?Также обратите внимание на недавно названный узел с именем <combined>.

Я высоко ценю вашу помощь.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Как будет выглядеть шаблон, если я захочу вернуться к исходной структуре ввода?

Straightforwad:

   <xsl:template match="combined">
       <parent>
          <xsl:copy-of select="@Id|@Value"/>
          <child x="{@x}" y="{@y}"/>
       </parent>
    </xsl:template>
3 голосов
/ 17 июня 2011

Этот шаблон можно использовать для преобразования родителя с ребенком в комбинированный элемент:

<xsl:template match="parent">
   <combined>
      <xsl:copy-of select="@* | child/@*" />
   </combined>
</xsl:template>

Для этого нужно скопировать все атрибуты из элемента <parent> ввода и его <child>в выходной элемент <combined>.

Вам также понадобится шаблон идентификатора, чтобы передать элемент <data> и другие узлы через:

<xsl:template match="node() | @*">
   <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
   </xsl:copy>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...