2014-01-29 2 views
0

Я пытаюсь использовать XSLT, чтобы перевести этот погодный поток (усеченный) в нечто, пригодное для использования нашей информационной системой отображения. Это первый раз, когда я работал с XSLT, поэтому я не знаю, с чего начать. Кажется, что мне нужно преобразовать каждое имя элемента в атрибут самого себя, переименовывая элемент, но я не могу найти примеров такого преобразования. Если кто-нибудь знает какие-либо примеры, которые я мог бы рассмотреть, это было бы полезно.XSLT: присвоить имя элемента атрибуту при переименовании

Токовый вход:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<current_observation version="1.0" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://www.weather.gov/view/current_observation.xsd"> 
    <credit>NOAA's National Weather Service</credit> 
    <credit_URL>http://weather.gov/</credit_URL> 
    <image> 
     <url>http://weather.gov/images/xml_logo.gif</url> 
     <title>NOAA's National Weather Service</title> 
     <link>http://weather.gov</link> 
    </image> 
    <suggested_pickup>15 minutes after the hour</suggested_pickup> 
    <suggested_pickup_period>60</suggested_pickup_period> 
    <location>Kansas City International Airport, MO</location> 
    <station_id>KMCI</station_id> 
    <latitude>39.3</latitude> 
    <longitude>-94.73</longitude> 
</current_observation> 

Желаемый результат:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<dataitems> 
    <dataitem name="credit">NOAA's National Weather Service</dataitem> 
    <dataitem name="credit_URL">http://weather.gov/</dataitem> 
    <dataitem name="suggested_pickup">15 minutes after the hour</dataitem> 
    <dataitem name="suggested_pickup_period">60</dataitem> 
    <dataitem name="location">Kansas City International Airport, MO</dataitem> 
    <dataitem name="station_id">KMCI</dataitem> 
    <dataitem name="latitude">39.3</dataitem> 
    <dataitem name="longitude">-94.73</dataitem> 
</dataitems> 
+1

Вы должны хотя бы попытаться написать код. Как это выглядит, вы просите бесплатного разработчика сделать вашу работу за вас. –

+0

Прошу прощения, если мне показалось, что я хотел, чтобы кто-то дал мне готовый ответ. Я только просил указать правильное направление на аналогичное преобразование, или если есть определенное имя для этого, я мог бы использовать для поиска. Все примеры, которые я нашел, касаются переименования элементов, но не превращают старое имя в новый атрибут. Благодаря! – CM402

ответ

1

Этот шаблон:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

<xsl:output method="xml" encoding="ISO-8859-1"/> 


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

    <!-- replace root element --> 
<xsl:template match="current_observation"> 
    <dataitems><xsl:apply-templates/></dataitems> 
</xsl:template> 

<!-- transformation for the rest of nodes --> 
    <xsl:template match="credit|credit_URL|suggested_pickup|suggested_pickup_period|location|station_id|latitude|longitude"> 
    <dataitem name="{name()}"><xsl:value-of select="."/></dataitem> 
</xsl:template> 

<!-- delete unwanted element --> 
<xsl:template match="image"/> 

</xsl:stylesheet> 

делает

<?xml version="1.0" encoding="ISO-8859-1"?> 
<dataitems> 
    <dataitem name="credit">NOAA's National Weather Service</dataitem> 
    <dataitem name="credit_URL">http://weather.gov/</dataitem> 
    <dataitem name="suggested_pickup">15 minutes after the hour</dataitem> 
    <dataitem name="suggested_pickup_period">60</dataitem> 
    <dataitem name="location">Kansas City International Airport, MO</dataitem> 
    <dataitem name="station_id">KMCI</dataitem> 
    <dataitem name="latitude">39.3</dataitem> 
    <dataitem name="longitude">-94.73</dataitem> 
</dataitems> 
Смежные вопросы