Перевод партнерской программы itunes rss через xslt - PullRequest
2 голосов
/ 25 марта 2010

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

<?xml version="1.0" encoding="utf-8"?>

    <feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
            <id>http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/sf=143441/limit=100/genre=6014/xml</id><title>iTunes Store: Top Paid Applications</title><updated>2010-03-24T15:36:42-07:00</updated><link rel="alternate" type="text/html" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=25180&amp;popId=30"/><link rel="self" href="http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/sf=143441/limit=100/genre=6014/xml"/><icon>http://phobos.apple.com/favicon.ico</icon><author><name>iTunes Store</name><uri>http://www.apple.com/itunes/</uri></author><rights>Copyright 2008 Apple Inc.</rights>

                    <entry>
                            <updated>date</updated>

                                    <id>someID</id>

                                    <title>a</title>
                                    <im:name>b</im:name>
                    </entry>
                    <entry>
                            <updated>date2/updated>

                                    <id>someID2</id>

                                    <title>a2</title>
                                    <im:name>b2</im:name>
                    </entry>
    </feed>

Если я попытаюсь <xsl:apply-templates match="entry"/>, он выплевывает все содержимое файла. Если я использую <xsl:call-template name="entry">, он покажет только одну запись, и я должен использовать <xsl:value-of select="//*[local-name(.)='name']"/>, чтобы получить имя, но это взлом. Ранее я использовал xslt для xml без пространств имен и xml, который имеет надлежащие родительские дочерние отношения, но не похожий на этот канал RSS. Запись уведомления не заключена в записи или что-либо еще.

Любая помощь приветствуется. Я хочу использовать xslt, потому что я хочу изменить ссылку itunes, чтобы пройти через мою партнерскую учетную запись - чтобы что-то автоматизированное не работало для меня.

1 Ответ

1 голос
/ 25 марта 2010

Вы соответствуете элементам, которые не находятся в пространстве имен, но фактические элементы в документе XML принадлежат (глухому) пространству имен : xmlns="http://www.w3.org/2005/Atom".

Следовательно, вам нужно объявить пространство имен в вашей таблице стилей, скажем, xmlns:atom="http://www.w3.org/2005/Atom". а затем сопоставить не только с {elementName}, но и с {atom: elementName}, где {elementName} в вашем случае: "entry".

...