2015-05-14 4 views
0

Я только начинаю узнавать о XLS, просто изменяю свой XML ниже. В частности, я хотел бы скопировать значение элемента <description> и заменить его на атрибут name его родителя <game>.XSL-копирование дочернего элемента в родительский атрибут

Источник XML:

<?xml version="1.0"?> 
<menu> 
    <game name="$100000P" index="" image=""> 
     <description>$100,000 Pyramid (1988)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Box Office, Inc.</manufacturer> 
     <year>1988</year> 
     <genre>Strategy</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 
    <game name="$takes" index="" image=""> 
     <description>High Stakes by Dick Francis (1986)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Mindscape, Inc.</manufacturer> 
     <year>1986</year> 
     <genre>Adventure</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 
    <game name="007Licen" index="" image=""> 
     <description>007 - Licence to Kill (1989)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Domark Ltd.</manufacturer> 
     <year>1989</year> 
     <genre>Driving</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 
... 

Желаемая Выход:

<?xml version="1.0"?> 
<menu> 
    <game name="$100,000 Pyramid (1988)" index="" image=""> 
     <description>$100,000 Pyramid (1988)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Box Office, Inc.</manufacturer> 
     <year>1988</year> 
     <genre>Strategy</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 
    <game name="High Stakes by Dick Francis (1986)" index="" image=""> 
     <description>High Stakes by Dick Francis (1986)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Mindscape, Inc.</manufacturer> 
     <year>1986</year> 
     <genre>Adventure</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 
    <game name="007 - Licence to Kill (1989)" index="" image=""> 
     <description>007 - Licence to Kill (1989)</description> 
     <cloneof></cloneof> 
     <crc></crc> 
     <manufacturer>Domark Ltd.</manufacturer> 
     <year>1989</year> 
     <genre>Driving</genre> 
     <rating></rating> 
     <enabled>Yes</enabled> 
    </game> 

Я попытался следующий XSL, но это не казалось, делать какие-либо изменения. На самом деле я почесываю голову прямо сейчас.

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

ответ

1

Проблема с подхода заключается в том, что когда вы делаете:

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

вы также скопировать исходный @name атрибут, перезапись новый @name атрибут, только сейчас созданы.

Попробуйте вместо этого:

<xsl:template match="game"> 
    <game> 
     <xsl:copy-of select="@*"/> 
     <xsl:attribute name="name"> 
      <xsl:value-of select="description"/> 
     </xsl:attribute> 
     <xsl:apply-templates select="node()"/> 
    </game> 
</xsl:template> 

или, если вы знаете, все атрибуты, которые game будет:

<xsl:template match="game"> 
    <game name="{description}" index="{@index}" image="{@image}"> 
     <xsl:apply-templates select="node()"/> 
    </game> 
</xsl:template> 
+0

Спасибо за ответ. Я попытался использовать оба предложенных шаблона xls, и результат: –

+0

$ 100,000 Пирамида (1988) Box Office, Inc. Стратегия Да <название игры = "High Stakes Дик Фрэнсис (1986)" индекс = "" IMAGE = ""> High Stakes Диком Francis (1986) Mindscape, Inc. Приключения Да <название игры = "007 - Лицензия на убийство (1989)" индекс = "" изображение = ""> 007 - Лицензия на убийство (1989) Domark ООО Вождение Да –

+0

Теперь он копирует элемент описания в атрибут имени игрового элемента. Однако все остальные элементы под игровым элементом, казалось, просто исчезли. –