XSLT: добавление узла! - PullRequest
       2

XSLT: добавление узла!

0 голосов
/ 12 июля 2010

Как мне инкапсулировать узлы вокруг моих блоков XML с помощью XSLT? Например, у меня есть следующий XML-файл.

<?xml version="1.0" encoding="iso-8859-1"?>
<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" omit-xml-declaration="yes" />

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

Мой входной XML-файл выглядит следующим образом.

  <Root>
<Location><Name>Pennsylvania</Name><Type>State</Type></Location>
</Root>

Мне бы хотелось, чтобы результат выглядел следующим образом.

      <Root><Container>
    <Location><Name>Pennsylvania</Name><Type>State</Type></Location>
</Container>
    </Root>

Я хочу убедиться, что узел с именем <CONTAINER> применяется каждый раз, он копирует информацию из Root / Location. Какие изменения мне нужно внести в мой файл XSLT?

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Обобщая все ответы в комментариях, это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()" name="identity">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Location">
        <Container>
            <xsl:call-template name="identity"/>
        </Container>
    </xsl:template>
</xsl:stylesheet>

Результат:

<Root>
    <Container>
        <Location>
            <Name>Pennsylvania</Name>
            <Type>State</Type>
        </Location>
    </Container>
</Root>
1 голос
/ 12 июля 2010

Я просто угадываю, а в режиме угадывания кажется, что вы хотите это :

РЕДАКТИРОВАТЬ : помогла еще одна догадка Мадс Хансен ...

Добавьте в шаблон идентификации, который у вас уже есть:

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