2010-03-25 2 views
2

저는 저의 평생 동안이 일을 할 수 없습니다. 다음은 itunes 제휴사의 RSS 피드에서 가져온 XML 스 니펫입니다. 나는 위에 인쇄를 태그에서 값을 원하지만 나는 어떤 이유로 수 없습니다 :xslt를 통해 iTunes 계열사 RSS를 번역합니다.

<?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 피드는 없습니다. 통지 항목은 항목 또는 아무것도 래핑되지 않습니다.

도움을 주시면 감사하겠습니다. 내 제휴 계정을 통해 이동하는 iTunes 링크를 변경하려면 xslt를 사용하고 싶습니다 - 그래서 자동화 된 무언가가 나를 위해 작동하지 않을 것입니다.

+0

좋은 질문 (+1). 심지어 중급 XSLT 프로그래머도이 문제에 직면합니다. 문제를 설명하는 나의 대답과 그것을 해결하는 방법이 있습니다. :) –

+0

@jd : 그런 다음 XSLT 명령을 다음과 같이 바꿉니다. ' 'elementName'에서'atom : elementName'까지 비슷한 다른 모든 요소 이름들 –

답변

1

네임 스페이스가없는 요소와 일치하지만 XML 문서의 실제 요소는 (냄새가없는) 네임 스페이스 : xmlns="http://www.w3.org/2005/Atom"에 속합니다.

따라서 스타일 시트에 네임 스페이스를 선언해야합니다 (예 : xmlns:atom="http://www.w3.org/2005/Atom"). {elementName}이 아니라 {atom : elementName}과 일치해야합니다. 여기서 {elementName}은 (는) '입력'입니다.

+0

당신이 말한 것을 시도했지만 제 두뇌가 개념을 막고 있습니다. 여기에 시도했지만 결과가 없습니다. 피드가 바로 상단 요소입니까? 나는 atom : 항목을 시도했지만 그것은 항목 템플릿을 만들지 않습니다. 감사. ... –

+0

다음은 내 xslt 헤더입니다.

+0

@jd : 그러면 XSLT 명령을 바꿉니다 :'