XSLT - группирует похожие узлы вместе и удаляет повторяющиеся узлы - PullRequest
0 голосов
/ 07 января 2019

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

<?xml version="1.0"?>
<R>
  <M>
    <H>1</H>
    <B>1</B>
  </M>
  <M>
    <H>1</H>
    <B>2</B>
  </M>
  <M>
    <H>1</H>
    <B>3</B>
  </M>
  <M>
    <H>1</H>
    <B>4</B>
  </M>
</R>

Здесь, если мы предположим, что «M» является основным узлом, «H» является заголовком, а «B» является телом, я хочу иметь только один узел «M» с одним «H» и всеми узлами «B» под Это.

По сути, я хочу переместить все узлы 'B' в первый узел 'M' и удалить все остальные теги 'M' и 'H'.

Может ли кто-нибудь помочь мне в достижении этого.

Ожидаемый результат будет:

<?xml version="1.0"?>
<R>
  <M>
    <H>1</H>
    <B>1</B>
    <B>2</B>
    <B>3</B>
    <B>4</B>
  </M>
</R>

Вот мой текущий скрипт XSLT:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0">
<xsl:output indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="/*">
    <xsl:copy>
        <R>
            <xsl:apply-templates select="@*|M/*" />
            <xsl:apply-templates select="@*|M/B" />
        </R>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 07 января 2019

Простое описание "В основном я хочу переместить все узлы 'B' в первый узел 'M' и удалить все другие теги 'M' и 'H'", кажется легко решаемым с помощью

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output indent="yes"/>

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

  <xsl:template match="R">
      <xsl:copy>
          <M>
              <xsl:apply-templates select="M[1]/H | M/B"/>
          </M>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty -development.net / ej9EGbG

Не уверен, нужна ли какая-либо группировка, если у вас есть различные значения для элементов H.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...