использование таблицы стилей XSLT в XML и деформатирование HTML - PullRequest
0 голосов
/ 12 февраля 2011

Я хотел бы создать фид данных, который имеет основные элементы RSS 2.0 и выглядит так:

<?xml version="1.0" encoding="UTF-8" ?> 
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"> 
<channel> 
<title>Clot3333333tory</title> 
<description>Clot333333333333333holesale pricing and bulk ordering to consumers and businesses.</description> 
<item>  
<title>
<description>
<link>  

Я использую таблицу стилей XSLT в документе XML для заполнения этого шаблона, проблема, с которой я столкнулся, - это использование тега <Caption> в документе XML для тега <description> в готовом проекте. Это поле «Заголовок» отформатировано в html, я хотел бы перетащить данные «Заголовок» в «описание», но просто отобразить его в виде текста и отбросить все теги HTML. Как это будет выглядеть в таблице стилей для этого?

EDIT:
входящий XML-файл выглядит так (включая только один элемент item):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StoreExport SYSTEM "http://store.yahoo.com/doc/dtd/StoreExport.dtd">  
<StoreExport>
<Settings>
<Published timestamp="1297187196"/>
<Locale code="C" name="English" encoding="iso-8859-1"/>  
<StoreName>Clo3333333nd.com</StoreName>
<Currency>USD</Currency>  
<ShipMethods>
  <ShipMethod>Ground</ShipMethod>
  <ShipMethod>Two Day Delivery</ShipMethod>
  <ShipMethod>One Day Delivery</ShipMethod>
  <ShipMethod>3 Day</ShipMethod>

</ShipMethods>
<PayMethods>
  <PayMethod>American Express</PayMethod>
  <PayMethod>Discover</PayMethod>
  <PayMethod>MasterCard</PayMethod>
  <PayMethod>Visa</PayMethod>
  <PayMethod>Diner's Club</PayMethod>
</PayMethods>
</Settings>
<Products>
<Product Id="agfasu">
  <Code>3616a</Code>
  <Description>Ageless Fashion Suit</Description>
  <Url>http://www.clo333333nd.com/agfasu.html</Url>
  <Thumb>&lt;img border=0 width=50 height=70 src=http://ep.yimg.33333333333st-27703333333618_2144_317652924&gt;</Thumb>
  <Picture>&lt;img border=0 width=600 height=845 src=http://ep.yimg.com/33333333-2770333333333317019111&gt;</Picture>

  <Orderable>YES</Orderable>
  <Taxable>YES</Taxable>
  <Pricing>
    <BasePrice>178.00</BasePrice>
    <LocalizedBasePrice>178.00</LocalizedBasePrice>
    <OrigPrice>299.99</OrigPrice>

    <LocalizedOrigPrice>299.99</LocalizedOrigPrice>
    <SalePrice>178.00</SalePrice>
    <LocalizedSalePrice>178.00</LocalizedSalePrice>
  </Pricing>
  <Path>
    <ProductRef Id="wochsu" Url="http://www.cl333333333333hsu.html">Womens Church Suits</ProductRef>
    <ProductRef Id="2454" Url="http://www.clo333333333nd.com/2454.html">Aussie Austine Spring/Summer 2011</ProductRef>

  </Path>
  <Availability>Usually ships the next business day.</Availability>
  <Caption>&lt;head&gt; &lt;meta content="en-us" http-equiv="Content-Language"&gt; &lt;style type="text/css"&gt; .style3 {  font-family: arial, helvetica;  font-size: medium;  font-weight: bold; } .style4 {  font-size: small; } &lt;/style&gt; &lt;/head&gt;  &lt;p&gt;&lt;strong&gt;Wholesale Women&amp;#39;s Church Suits&amp;nbsp; - 3 Piece Suit - Jacket/Vest/Long  Skirt&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Aussie Austine Spring/Summer 2011&lt;/strong&gt;&lt;/p&gt; &lt;p class="style4"&gt;&lt;strong&gt;Wholesale Clothing Distributors - Church Attire, Gospel Fashion, Mother of Bride Style  at a Wholesale Price. For all your fancy, classic, elegant parties and or  occasions. Our suits come in a variety of styles to accommodate your fashion  taste. Suits for all women, moms, grandma&amp;#39;s, daughters and aunts. That classic  look that will bring attention. From stylish skirts, pants, jackets  and vests. Two piece suits, available hats and purses. Brand Name Wholesale  Ladies Apparel. &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;3&lt;strong&gt; Piece Suit - Jacket/Vest/Long Skirt&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Sizes&amp;nbsp; 8 10 12 14 16 18 20&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Color&amp;nbsp; Khaki Red&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Available Accessories: Hat and Purse&amp;nbsp; &lt;/p&gt; &lt;font face="arial, helvetica" size="4"&gt; &lt;p align="left"&gt;Orders of 12 and 24 Items are Mixed Colors and Sizes. For more  information Please call Us @ 323333300&lt;/p&gt; &lt;p align="left"&gt;Please feel free to call if you would like wholesale pricing for  larger orders&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;font face="arial, helvetica" size="2"&gt; &lt;p align="left"&gt;&lt;b&gt;&lt;font size="4"&gt;Please call or E-mail &lt;a href="mailto:Sal333333sland.com"&gt;Sales@cloth333333333and.com&lt;/a&gt; If you  are interested in purchasing larger quantities&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; &lt;/font&gt; &lt;p align="left" class="style3"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;  &lt;p align="left"&gt;`&lt;/p&gt;</Caption>  

вы можете увидеть тег 'Caption', о котором я упоминал внизу.
я никогда раньше не использовал xslt, поэтому в настоящее время у меня есть только скелет, который я могу получить только в основном, чтобы повторить все данные, даже если я использую шаблоны 'match', весь текст включается в конечный продукт независимо. я знаю, что просто неправильно формулирую шаблон, но я могу найти эту концепцию объясненной где угодно. формулировка, которую я использую для матча:

<xsl:template match="Description"
<title>
<apply-template/>
</title>
</xsl:template>  

с целью превращения тега 'Description' в поле 'title' в конечном документе xml rss2.0

EDIT:
Хорошо, я использую XSLTPalette, и на экране есть 3 режима вывода: «сырые», «красивые», «визуализированные» результаты. когда я использую таблицу стилей, которая у меня есть, чтобы убрать элементы из узлов «Заголовок», они отображаются так, как я хочу в «сырых» результатах, это просто текст без всех экранированных символов. также отображается нормально в отображаемом результате, но мои данные все еще не структурированы в отображаемом результате. он вообще не отображается в «симпатичном» окне вывода, но «сырой» становится ближе к тому, что мне нужно, я думаю. Вот неполная таблица стилей для примера:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">
    <xsl:template match="//Product/Caption">
    <xsl:param name="text"/>
    <xsl:choose>
        <xsl:when test="contains($text, '&lt;')">
            <xsl:value-of select="substring-before($text, '&lt;')"/>
            <xsl:call-template name="strip-tags">
                    <xsl:with-param name="text" select="substring-after($text, '&gt;')"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$text"/>
        </xsl:otherwise>
    </xsl:choose>
 </xsl:template>
</xsl:stylesheet>  

две вещи: это эффективно удаляет правильный раздел узлов, но как бы я также инкапсулировал вывод этого раздела в тег под названием «описание» для окончательного документа, и что я не делаю, чтобы иметь только те вещи, которые я хочу отображаться в продукте, например, не включать ничего, кроме того, что я хочу указать.

1 Ответ

0 голосов
/ 12 февраля 2011

Не видя точно, что вы получаете в качестве входных данных, я могу только предложить вам пропустить узлы, с которых вы хотите вырезать HTML, через этот шаблон XSLT.

<xsl:template name="strip-tags">
    <xsl:param name="text"/>
    <xsl:choose>
        <xsl:when test="contains($text, '&lt;')">
            <xsl:value-of select="substring-before($text, '&lt;')"/>
            <xsl:call-template name="strip-tags">
                    <xsl:with-param name="text" select="substring-after($text, '&gt;')"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$text"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Просто включите его в существующий XSLT, применив его к соответствующему узлу <Caption>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...