XSL для переименования элемента на основе атрибута - PullRequest
2 голосов
/ 03 февраля 2012

Я пытаюсь использовать XSL для преобразования XML-файла и не могу понять, как переименовать элемент в качестве имени или значения одного из его атрибутов. Я нашел множество примеров преобразования атрибутов в элементы и наоборот, но я продолжаю получать вложенные элементы, которые мне не нужны. Вот пример:

Оригинальный XML:

<row_item column="Hostname">HOST-A</row_item>
<row_item column="IP Address">10.10.10.10</row_item>

Что бы я хотел вывести:

<column>HOST-A</column>

Или (предпочтительно):

<hostname>HOST-A</hostname>

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="row_item[1]">
     <xsl:element name="{@column}">
      <xsl:value-of select="."/>
     </xsl:element>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

при применении к этому документу XML :

<rows>
    <row_item column="Hostname">HOST-A</row_item>
    <row_item column="IP Address">10.10.10.10</row_item>
</rows>

создает искомое значение,правильный результат :

<Hostname>HOST-A</Hostname>

Пояснение :

Надлежащее использование xsl:element и АВТ .

1 голос
/ 03 февраля 2012

Самый простой способ переименовать некоторые элементы в документе - использовать преобразование идентичности, а затем добавить некоторый шаблон для элементов, которые вы хотите изменить.1005 *

Это преобразуется в

<rows>
    <hostname>HOST-A</hostname>
    <row_item column="IP Address">10.10.10.10</row_item>
</rows>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...