2009-06-02 4 views
0

я получил урок от W3Schools на XML и XSL, у меня есть три файла (смотрите ниже код) XML - cdcatalog.xml XSL - cdcatalog.xsl HTML - search.htmФорма поиска XML-документ

Что я пытаюсь сделать, это создать форму поиска в формате HTML для поиска документа XML, и изменить некоторые имена художников в файле XML, например, если бы я выполнил поиск Боба Дилана, эти три детали должны быть возвращены, так как поиск должен совпадать bob и dylan в узлах художника:

<cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 

    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Hide your heart</title> 
    <artist>Bonnie Dylan</artist> 
    <country>UK</country> 

    <company>CBS Records</company> 
    <price>9.90</price> 
    <year>1988</year> 
    </cd> 
    <cd> 
    <title>Greatest Hits</title> 
    <artist>Bob Parton</artist> 

    <country>USA</country> 
    <company>RCA</company> 
    <price>9.90</price> 
    <year>1982</year> 
    </cd> 

Я не уверен, что это pos sible, Любой примерный код будет большой помощью.

XML - cdcatalog.xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> 
<!-- Edited by XMLSpy® --> 
<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 

    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Hide your heart</title> 
    <artist>Bonnie Dylan</artist> 
    <country>UK</country> 

    <company>CBS Records</company> 
    <price>9.90</price> 
    <year>1988</year> 
    </cd> 
    <cd> 
    <title>Greatest Hits</title> 
    <artist>Bob Parton</artist> 

    <country>USA</country> 
    <company>RCA</company> 
    <price>9.90</price> 
    <year>1982</year> 
    </cd> 
    <cd> 
    <title>Still got the blues</title> 

    <artist>Gary Moore</artist> 
    <country>UK</country> 
    <company>Virgin records</company> 
    <price>10.20</price> 
    <year>1990</year> 
    </cd> 

    <cd> 
    <title>Eros</title> 
    <artist>Eros Ramazzotti</artist> 
    <country>EU</country> 
    <company>BMG</company> 
    <price>9.90</price> 

    <year>1997</year> 
    </cd> 
    <cd> 
    <title>One night only</title> 
    <artist>Bee Gees</artist> 
    <country>UK</country> 
    <company>Polydor</company> 

    <price>10.90</price> 
    <year>1998</year> 
    </cd> 
    <cd> 
    <title>Sylvias Mother</title> 
    <artist>Dr.Hook</artist> 
    <country>UK</country> 

    <company>CBS</company> 
    <price>8.10</price> 
    <year>1973</year> 
    </cd> 
    <cd> 
    <title>Maggie May</title> 
    <artist>Rod Stewart</artist> 

    <country>UK</country> 
    <company>Pickwick</company> 
    <price>8.50</price> 
    <year>1990</year> 
    </cd> 
    <cd> 
    <title>Romanza</title> 

    <artist>Andrea Bocelli</artist> 
    <country>EU</country> 
    <company>Polydor</company> 
    <price>10.80</price> 
    <year>1996</year> 
    </cd> 

    <cd> 
    <title>When a man loves a woman</title> 
    <artist>Percy Sledge</artist> 
    <country>USA</country> 
    <company>Atlantic</company> 
    <price>8.70</price> 

    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Black angel</title> 
    <artist>Savage Rose</artist> 
    <country>EU</country> 
    <company>Mega</company> 

    <price>10.90</price> 
    <year>1995</year> 
    </cd> 
    <cd> 
    <title>1999 Grammy Nominees</title> 
    <artist>Many</artist> 
    <country>USA</country> 

    <company>Grammy</company> 
    <price>10.20</price> 
    <year>1999</year> 
    </cd> 
    <cd> 
    <title>For the good times</title> 
    <artist>Kenny Rogers</artist> 

    <country>UK</country> 
    <company>Mucik Master</company> 
    <price>8.70</price> 
    <year>1995</year> 
    </cd> 
    <cd> 
    <title>Big Willie style</title> 

    <artist>Will Smith</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>9.90</price> 
    <year>1997</year> 
    </cd> 

    <cd> 
    <title>Tupelo Honey</title> 
    <artist>Van Morrison</artist> 
    <country>UK</country> 
    <company>Polydor</company> 
    <price>8.20</price> 

    <year>1971</year> 
    </cd> 
    <cd> 
    <title>Soulsville</title> 
    <artist>Jorn Hoel</artist> 
    <country>Norway</country> 
    <company>WEA</company> 

    <price>7.90</price> 
    <year>1996</year> 
    </cd> 
    <cd> 
    <title>The very best of</title> 
    <artist>Cat Stevens</artist> 
    <country>UK</country> 

    <company>Island</company> 
    <price>8.90</price> 
    <year>1990</year> 
    </cd> 
    <cd> 
    <title>Stop</title> 
    <artist>Sam Brown</artist> 

    <country>UK</country> 
    <company>A and M</company> 
    <price>8.90</price> 
    <year>1988</year> 
    </cd> 
    <cd> 
    <title>Bridge of Spies</title> 

    <artist>T`Pau</artist> 
    <country>UK</country> 
    <company>Siren</company> 
    <price>7.90</price> 
    <year>1987</year> 
    </cd> 

    <cd> 
    <title>Private Dancer</title> 
    <artist>Tina Turner</artist> 
    <country>UK</country> 
    <company>Capitol</company> 
    <price>8.90</price> 

    <year>1983</year> 
    </cd> 
    <cd> 
    <title>Midt om natten</title> 
    <artist>Kim Larsen</artist> 
    <country>EU</country> 
    <company>Medley</company> 

    <price>7.80</price> 
    <year>1983</year> 
    </cd> 
    <cd> 
    <title>Pavarotti Gala Concert</title> 
    <artist>Luciano Pavarotti</artist> 
    <country>UK</country> 

    <company>DECCA</company> 
    <price>9.90</price> 
    <year>1991</year> 
    </cd> 
    <cd> 
    <title>The dock of the bay</title> 
    <artist>Otis Redding</artist> 

    <country>USA</country> 
    <company>Atlantic</company> 
    <price>7.90</price> 
    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Picture book</title> 

    <artist>Simply Red</artist> 
    <country>EU</country> 
    <company>Elektra</company> 
    <price>7.20</price> 
    <year>1985</year> 
    </cd> 

    <cd> 
    <title>Red</title> 
    <artist>The Communards</artist> 
    <country>UK</country> 
    <company>London</company> 
    <price>7.80</price> 

    <year>1987</year> 
    </cd> 
    <cd> 
    <title>Unchain my heart</title> 
    <artist>Joe Cocker</artist> 
    <country>USA</country> 
    <company>EMI</company> 

    <price>8.20</price> 
    <year>1987</year> 
    </cd> 
</catalog> 

XSL - cdcatalog.xsl

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

    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>My CD Collection</h2> 
     <table border="1"> 
      <tr bgcolor="#9acd32"> 
      <th>Title</th> 
      <th>Artist</th> 
      </tr> 
      <xsl:for-each select="catalog/cd[artist='Bob Dylan']"> 
      <tr> 
       <td> 
       <xsl:value-of select="title"/> 
       </td> 
       <td> 
       <xsl:value-of select="artist"/> 
       </td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

HTML - search.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Untitled Page</title> 
</head> 
<body> 
<html> 
<head><title>Search</title></head> 
<body> 
    <form action="cdcatalog.xsl" method="post"> 
     Find <input type="text" name="q"> 
     <input type="submit" value="Go"> 
    </form> 
</body> 
</html> 
</body> 
</html> 

ответ

0

Прежде всего, ваш HTML не является действительным и отправка на XSL не приведет к тому, что вы хотите.
Второе - выражение в XSL

<xsl:for-each select="catalog/cd[artist='Bob Dylan']"> 

будет соответствовать только художнику узлы, которые имеют точно Боба Дилана в их стоимости.
Если вы хотите получить частичные совпадения, вы можете попробовать использовать

<xsl:for-each select="catalog/cd[contains(artist, 'Bob') or contains(artist, 'Dylan')]">