【问题标题】:Styling an XML file with an XSLT styesheet使用 XSLT 样式表设置 XML 文件的样式
【发布时间】:2012-03-03 17:23:47
【问题描述】:

谁能告诉我需要什么 xslt 样式表来设置这个 xml 文件的样式:

<?xml version="1.0" encoding="UTF-8"?>
<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
  <OperationRequest>
    <HTTPHeaders>
      <Header Name="UserAgent" Value="Jakarta Commons-HttpClient/3.0.1">
      </Header>
    </HTTPHeaders>
    <RequestId>09ZDHZ7PV71DC7Z168WA</RequestId>
    <Arguments>
      <Argument Name="AssociateTag" Value="xxxxx"></Argument>
      <Argument Name="Service" Value="AWSECommerceService"></Argument>
      <Argument Name="SubscriptionId" Value="yyyyy"></Argument>
      <Argument Name="Signature" Value="zzzzz"></Argument>
      <Argument Name="ResponseGroup" Value="NewReleases"></Argument>
      <Argument Name="Operation" Value="BrowseNodeLookup"></Argument>
      <Argument Name="BrowseNodeId" Value="676410011"></Argument>
      <Argument Name="Timestamp" Value="2012-03-03T16:37:17Z"></Argument>
    </Arguments>
    <RequestProcessingTime>0.0326540470123291</RequestProcessingTime>
  </OperationRequest>
  <BrowseNodes>
    <Request>
      <IsValid>True</IsValid>
      <BrowseNodeLookupRequest>
        <BrowseNodeId>676410011</BrowseNodeId>
        <ResponseGroup>NewReleases</ResponseGroup>
      </BrowseNodeLookupRequest>
    </Request>
    <BrowseNode>
      <BrowseNodeId>676410011</BrowseNodeId>
      <Name>Games</Name>
      <NewReleases>
        <NewRelease>
          <ASIN>B0073POVPK</ASIN>
          <Title>Pokepark 2: Wonders Beyond (Wii)</Title>
        </NewRelease>
        <NewRelease>
          <ASIN>B0076X58XI</ASIN>
          <Title>Back to the Future: The Game (Wii)</Title>
        </NewRelease>
      </NewReleases>
      <TopItemSet>
        <Type>NewReleases</Type>
        <TopItem>
          <ASIN>B0073POVPK</ASIN>
          <Title>Pokepark 2: Wonders Beyond (Wii)</Title>
          <DetailPageURL>http://www.amazon.co.uk/Pokepark-2-Wonders-Beyond-Wii-Nintendo/dp/B0073POVPK%3FSubscriptionId%3D116AQMJ35GESH5XBF1G2%26tag%3Dwii07-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0073POVPK</DetailPageURL>
          <ProductGroup>Video Games</ProductGroup>
        </TopItem>
        <TopItem>
          <ASIN>B0076X58XI</ASIN>
          <Title>Back to the Future: The Game (Wii)</Title>
          <DetailPageURL>http://www.amazon.co.uk/Back-Future-Game-Wii-Nintendo/dp/B0076X58XI%3FSubscriptionId%3D116AQMJ35GESH5XBF1G2%26tag%3Dwii07-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0076X58XI</DetailPageURL>
          <ProductGroup>Video Games</ProductGroup>
        </TopItem>
      </TopItemSet>
    </BrowseNode>
  </BrowseNodes>
</BrowseNodeLookupResponse>

完整文件在这里 - http://www.wiiuser.co.uk/XML_Games_NR1_original.xml

让它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<xml xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <root>
        <NewRelease>
            <asin>B0073POVPK</asin>
            <Title>Pokepark 2: Wonders Beyond (Wii)</Title>
        </NewRelease>
        <NewRelease>
            <asin>B0076X58XI</asin>
            <Title>Back to the Future: The Game (Wii)</Title>
        </NewRelease>
    </root>
</xml>

完整的输出文件在这里 - http://www.wiiuser.co.uk/XML_Games_NR1_styled.xml

我知道我在这里需要很多帮助,而且我通常不会问,但我真的被困住了,我已经尝试了好几天才能让它发挥作用。我敢肯定,对于那些知道该怎么做的人来说,这很简单,但不幸的是我不是其中之一。

请不要因为提出这个问题而标记我。

提前感谢您提供的任何帮助。

这是我在亚马逊更改架构之前使用的 xslt 文件,但现在它无法正常工作。也许之前有问题,但架构更改影响了它。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <xml>
      <root>
        <xsl:apply-templates select="aws:BrowseNodeLookupResponse/BrowseNodes/BrowseNode/NewReleases/NewRelease" />
      </root>
    </xml>
  </xsl:template>

  <xsl:template match="aws:NewRelease">
    <NewRelease>
    <asin>
      <xsl:value-of select="aws:ASIN" />
    </asin>
    <Title>
      <xsl:value-of select="aws:Title" />
    </Title>
    </NewRelease>
  </xsl:template>  
</xsl:stylesheet>

【问题讨论】:

  • 如果您制作较小版本的输入和所需输出并将它们直接放入您的问题中,这将有所帮助。旧的 xsl 足够小,可以直接在问题中而不是链接中。

标签: xml amazon-web-services xslt-1.0


【解决方案1】:

您必须在应用模板的“选择”属性中指定 xpath 的所有步骤的命名空间:

<xsl:apply-templates select="aws:BrowseNodeLookupResponse/aws:BrowseNodes/aws:BrowseNode/aws:NewReleases/aws:NewRelease"/>

【讨论】:

  • 谢谢默里。我以前试过这个,你是对的,它确实产生了我需要的数据。但是,对亚马逊返回的数据进行样式设置似乎不起作用。要看到这一点 - Firefox 'page source' 显示了整个 xml 文件(我不想要), IE page source' 显示了我确实需要的样式化结果(带有元素标签),如我的问题所示。在浏览器中看到它们看起来都一样 - 数据行,而我(成功)生成的其他样式文件看起来像一个正确的 xml 文件。希望这能解释我的问题。
  • 啊..所以你在浏览器中进行“客户端”转换,它在 MSIE 中工作,但在 firefox 中没有。你检查过这个线程吗? stackoverflow.com/questions/221434/…
  • 我现在就读。我只是在客户端检查样式表是否有效。通常,我用“&style=...”调用 AWS 来设置返回的 xml 样式。 (这适用于我拥有的网站的几乎所有页面)。顺便说一句,我通过保存文件并在浏览器中打开来检查文件,我通常不需要这样做。调用生成的所有其他文件都是结构正确的 xml。
  • Murray - 我在上面添加了转换前和转换后文件的链接。如果您在浏览器中打开它们,您可以看到输出的外观。添加您建议的代码仅显示我之前提到的数据。我需要有人告诉我在这里做什么,因为遗憾的是,我即将放弃所有使用它的网站。
  • 如果您不是真的进行客户端转换,最好使用 xsltproc 在命令行上尝试转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2014-02-10
  • 2019-05-31
相关资源
最近更新 更多