Преобразование пары «имя / значение» в элементы XML с использованием XSLT - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть XML-файл, состоящий из пар Имя / Значение, которые мне нужны, в формате, использующем xslt 1, где каждое «Имя» - это имя элемента со значением в содержании. Вот пример:

Введите:

<Root>
  <Entities>
    <Entity EntityName="Client">
      <Data Name="ADDR_City">Anytown</Data>
      <Data Name="ADDR_State">SC</Data>
      <Data Name="ADDR_Zip">23904</Data>
    </Entity>
  </Entities>
</Root>

Выход:

<Root>
  <Entities>
    <Client>
      <ADDR_City>Anytown</ADDR_City>
      <ADDR_State>SC</ADDR_State>
      <ADDR_Zip>23904</ADDR_Zip>
    </Client>
  </Entities>
</Root>

EntityName клиента не обязательно является единственным способом, которым это будет работать ... Я в основном заинтересован в получении полей Data Name = "... в правильном формате. Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012
<xsl:for-each select="Data">
   <xsl:element Name="{@Name}"><xsl:value-of select="." /></xsl:element>
</xsl:for-each>
1 голос
/ 03 апреля 2012

Редактировать: Извинения - я пропустил имя Entity.Обновлено при условии, что количество элементов множества <Entity> per <Entities>.Думаю, мне также нужно указать, что это не удастся, если атрибуты EntityName или Name содержат недопустимые символы элемента (например, пробел), или если атрибуты отсутствуют полностью.

<?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" indent="yes"/>

  <xsl:template match="/Root">
    <Root>
      <xsl:for-each select="Entities">
        <Entities>
          <xsl:for-each select="Entity">
            <xsl:element name="{@EntityName}">
              <xsl:for-each select="Data">
                <xsl:element name="{@Name}">
                  <xsl:value-of select="./text()"/>
                </xsl:element>
              </xsl:for-each>
            </xsl:element>
          </xsl:for-each>
        </Entities>
      </xsl:for-each>
    </Root>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...