Ted Roche
Ð嵀 RSS ÐÂÎÅ¾ÛºÏÆµ·±³öÏÖ£¬ÕâÊÇÒòΪԽÀ´Ô½¶àµÄÈí¼þ¿ª·¢ÈËÔ±·¢ÏÖ£ºÎÞÂÛÊÇÓÃÓÚÉÌÒµ»¹ÊǸöÈËʹÓ㬸ü¼ÊõÔÚ¡°ÓïÑÔ±í´ï¡±·½ÃæÈ·ÊµÓÐЧ¡£ÀýÈ磬һ¸ö³ÌÐòÔ±µÄÍøÂçÈռǿÉÒÔΪ¼Ç¼¿ª·¢ÈËÔ±ÔÚ×îÐÂÏîÄ¿»ò¸ÐÐËȤµÄ½â¾ö·½°¸ÖиÐÊܵ½µÄϲÔûòÓöµ½µÄÌôÕ½Ìṩһ¸öºÜºÃµÄƽ̨¡£ÔÚÕâÆª Ted Roche ÔÚ 4 Ô·¢±íµÄ RSS ÎÄÕµÄÐøÆªÖУ¬ËûչʾÁË Visual FoxPro ¿ª·¢ÈËÔ±ÈçºÎÄܹ»½öʹÓü¸¸ö³£ÓÃÇÒ¹¦ÄÜÇ¿´óµÄ VFP ÃüÁîÀ´ÇáËɵش´½¨ RSS ¾ÛºÏÐÂÎÅ¡£
ÔÚÉϸöÔÂÓÐ¹Ø RSS µÄÎÄÕÂÖУ¬ÎÒ̸µ½ÁË×÷Ϊһ¸öʹÓÃÕßÀ´Ê¹Óà RSS£¬ÊÖ¶¯¶ÁÈ¡ºÍ±àд RSS£¬¶©ÔÄ RSS ¾ÛºÏÐÂÎÅÒÔ±ãÔÚÐÂÎÅÔĶÁÆ÷ÖÐÔĶÁ£¬ÒÔ¼°Ê¹Óà blogging Èí¼þ·¢²¼ RSS¡£±¾ÎĽ«Ì½ÌÖʹÓà Visual FoxPro ÒÔ±à³Ì·½Ê½Éú³É RSS¡£ÎÒ½«ËµÃ÷»ù±¾µÄ¸ñʽ£¬²¢ÌÖÂÛÓà VFP Éú³É RSS µÄÁ½ÖÖ·½·¨¡£
¸ñʽ
RSS µÄÀúÊ·ÓëºÜ¶àÌØ¶¨±ê×¼ÀàËÆ£¬²»Í¬µÄÍÅÌå»ñµÃ¾ø¶ÔÓÅÊÆµØÎ»²¢ÉùÃ÷ÆäºÏÀíÐÔ£¬È»ºó·ÖÁѲ¢ÁôϾɸñʽ¡£Êµ¼ÊÉÏ£¬ÏÖÔÚÓÐÁ½ÖÖ¸ñʽ¿ÉÒÔ¿¼ÂÇ£ºRSS 1.0 ºÍ 2.0¡££¨µÚÈý¸ö¾ºÕùÕß Atom ¡ª ÓÐÕùÒ飬ÕýÈçËüµÄijЩ×÷ÕßËù¼á³ÖµÄ£¬¸ù±¾²»ÊÇ RSS ¡ª ¿ÉÄÜÖ»ÊÇÒ»ÖÖ±äÌå¡£ËüÕý´¦ÓÚÔçÆÚ¿ª·¢½×¶Î£¬Ä¿Ç°µÄ°æ±¾ÊÇ 3.0£¬±¾ÎIJ»»á¿¼ÂÇËü£¬µ«»á¶ÔÆä¼ÓÒÔ¹Ø×¢¡££©
¾¡¹ÜÓÐÏàËÆÖ®´¦£¬RSS 1.0 ºÍ RSS 2.0 ÈÔÈ»ÓÉÁ½¸ö¶ÔÁ¢µÄÕóÓªËù¹ÜÀí¡£Èç¹ûÄúÖ»ÄÜÖ§³ÖÒ»¸ö¸ñʽ£¬ÄÇô RSS 2.0 ËÆºõÊÇ×î¼òµ¥ÇÒ×îÆÕ±éµÄ¡£µ«ÊÇ£¬RSS 1.0 ¾ßÓиü·á¸»µÄÓï·¨£¬²¢ÇÒ¶ÔÀ©Õ¹»ù±¾½á¹¹µÄº¬ÒåÓиüÃ÷È·µÄ¶¨Òå¡£´ó¶àÊý¹¤¾ß¶ÔÕâÁ½ÖÖ¸ñʽ¶¼Ö§³Ö£¬²¢ÇÒÕýÈçÎÒ½«Õ¹Ê¾µÄ£¬ÔÚÕâÁ½ÖÖ¸ñʽÖÐÉú³É¡°¹«·Öĸ¡±Êä³ö²¢²»ÊÇÄÇôÀ§ÄÑ¡£
ÄÇô£¬Ê²Ã´ÊÇ»ù´¡½á¹¹ÄØ£¿Ò»¸ö RSS Îĵµ£¨Ò²³ÆÎª¡°¾ÛºÏÐÂÎÅ¡±£¬ÒòΪËüÃǺܶ඼ÊÇÐÂΞۺϣ©°üº¬Ò»¸öÃèÊöÐÅÏ¢Ô´£¨ÐÂÎÅ¡°Í¨µÀ¡±£©µÄ±êÍ·ºÍÒ»¸ö´øÓÐһƪ»ò¶àƪÎÄÕ¡¢ÐÂÎÅÍ·Ìõ¡¢ÒýÓûòÕßÈκÎËæ¸½ÄÚÈݵÄÕýÎÄ¡£ÔÚ RSS 1.0 ÖУ¬ÏîÊÇͨµÀÔªËØµÄͬ±²£¬ËüÃÇÔÚͨµÀÔªËØµÄ ¼¯ºÏÖÐÁгö¡£ÔÚ RSS 2.0 ÖУ¬Ïî±¾Éí×÷Ϊ×ÓÔªËØ°üº¬ÔÚͨµÀÔªËØÄÚ¡£ÉÏһƪÎÄÕÂչʾÁË RSS 2.0 µÄÒ»¸öʾÀý£¬ÓÉ¿¿½ü¶¥²¿µÄ °æ±¾±ê¼ÇÀ´Çø·Ö¡£ÏÂÃæµÄ´úÂëչʾÁËÒ»¸öµäÐ굀 RSS 1.0 feed¡£Çë×¢Ò⣬Õû¸öÎĵµ¶¼°üÀ¨ÔÚ ºÍ ±ê¼ÇÖС£Õâ±íÏÖÁË RSS 1.0 ÎĵµµÄÌØÐÔ¡£
XMLns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" XMLns:dc="http://purl.org/dc/elements/1.1/" XMLns:sy="http://purl.org/rss/1.0/modules/syndication/" XMLns:admin="http://webns.net/mvcb/" XMLns="http://purl.org/rss/1.0/"> rdf:about="http://www.tedroche.com"> Site http://www.tedroche.com & Associates, LLC "http://msdn.microsoft.com/vfoxpro"/> "mailto:tedroche@tedroche.com"/> "http://www.tedroche.com/ConfGrid#2003"/> "http://www.tedroche.com/ConfGrid#2003"> from 2003 conferences...]]> http://www.tedroche.com/ConfGrid#2003
·µ»ØÒ³Ê×
Éú³É RSS
Éú³É RSS µÄ·½·¨ÓкܶàÖÖ¡£ÔÚÉÏһƪÎÄÕÂÖУ¬ÎÒÌáµ½ÁË Notepad£¬ËüÊÇÒ»ÖÖ´Ö²Úµ«ÓÐЧµÄ¹¤¾ß¡£ÔÚÕâÀÎÒ½«ÒÔÁ½ÖÖ²»Í¬µÄ·½·¨Ê¹Óà VFP£ºtextmerge ºÍ MSXML COM ¶ÔÏó¡£Ã¿ÖÖ¼¼Êõ¶¼ÓÐÆäÓÅÊÆºÍÁÓÊÆ¡£
VFP ¼¼ÊõµÄÓÅÊÆÔÚÓÚÆäËٶȺÍÅäÖõļòµ¥ÐÔ¡£Textmerge ÔÚËÙ¶ÈÉÏÕ¼ÓÅÊÆ£ºÓÉÓÚËùʹÓõÄËùÓжÔÏó¶¼ÊÇÔÉú VFP ÃüÁÆäÉú³É¹ý³Ì¿ìÈçÉÁµç¡£°²×°Éú³É RSS µÄ VFP Ó¦ÓóÌÐòÖ»ÐèҪͨ³£µÄÔËÐпⰲװ¡£ÓëÖ®Ïà¶Ô£¬MSXML ¶ÔÏó±ØÐëÔÚÄ¿±ê»úÆ÷Éϰ²×°ºÍÅäÖã»ÔÚ Web ·þÎñÆ÷ÉÏʹÓÃËüʱ£¬ÎÒÓöµ½ÁËһЩÀ§ÄÑ£¬¶øÆäËûÈËÒ²±¨¸æÁËÀàËÆµÄÎÊÌâ¡£ÔÉú VFP ¼¼Êõ±ÜÃâÁËÕâÒ»µã¡££¨Çë×¢Ò⣬XMLToCursor ʹÓà MSXML COM ¶ÔÏó£»Èç¹ûÄúҪѰÇóÒ»ÖÖ¡°´¿´â¡±µÄ VFP ½â¾ö·½°¸£¬ÄÇôҲÐèÒª±ÜÃâÕâÒ»µã¡££©
µ«ÊÇ£¬VFP ûÓÐÈκÎÔÉú¹¦ÄÜÀ´ÑéÖ¤ºÍ²Ù×÷ XML£»Òò´Ë£¬Éú³ÉµÄ¾ÛºÏÐÂÎÅ¿ÉÄܲ»ÕýÈ·¡£×î¼ÑʾÀýÖ®Ò»ÔÚÉÏÊö´úÂë¿éÖУºÐÂΞۺϵıêÌâÊÇ¡°Ted Roche & Associates£¬LLC Web Site¡±£¬and ×Ö·ûÐèÒª¡°×ªÒ塱Ϊ & ¸ñʽ£¬ÒÔ·ÀÖ¹·ÖÎö´íÎó¡£Í¬Ñù£¬´óÓںźÍСÓÚºÅÒ²Òª·Ö±ðת»»Îª > ºÍ <¡£
¸ù¾ÝÄúΪ¾ÛºÏÐÂÎÅÑ¡ÔñµÄ×Ö·û¼¯£¬ÆäËû×Ö·ûÒ²Ó¦¸Ã½øÐÐתÒ壬ÒÔÈ·±£ÔÚÄ¿±êϵͳÉÏÕýÈ·ÏÔʾ¡£³ýÁË×Ö·û¼¯×ª»»ÒÔÍ⣬ʹÓà MSXML COM ¶ÔÏ󻹿ÉÒÔÈ·±£Íê³ÉһЩ»ù±¾µÄÑéÖ¤¡£COM ¶ÔÏó½«Ê¼ÖÕÉú³ÉÓÐЧÇÒ¸ñʽ¹æ·¶µÄ XML¡£Ê¹Óà Visual FoxPro ¶ÔÏó£¬ÄúÐèÒª×Ô¼º¼ì²é XML¡£
ΪÁ˼ò»¯±¾ÎÄÖеļ¼Êõ½âÊÍ£¬Äú¿ÉÒÔ¼Ù¶¨Êý¾ÝÀ´×ÔÁ½¸öÓα꣺curHead °üº¬±êÌ⡢˵Ã÷ÒÔ¼°Í¨µÀ£¨±êÍ·£©ÔªËØËùÐèµÄÁ´½ÓÐÅÏ¢£¬curItem °üº¬Ã¿¸öÐÂÎÅÏîµÄÒ»¸ö¼Ç¼£¬²¢´øÓиÃÎÄÕµıêÌâ¡¢Á´½ÓºÍ˵Ã÷¡£
·µ»ØÒ³Ê×
ʹÓà FoxPro textmerge Éú³É RSS
FoxPro textmerge ¿ÉÒÔͨ¹ýÒÔÏ´úÂë¿ìËÙ¶øÓÐЧµØÉú³É XML£¬Õâ¶Î´úÂ뽫Éú³ÉÒ»¸ö RSS 2.0 feed£º
LOCAL lcXML as String, lcContents as String, lcFileName
STORE SPACE(0) TO lcXML, lcContents
#DEFINE CRLF CHR(13)+CHR(10)
lcFileName = "trweb.XML"
* Read header information
SELECT cTitle as Title, ;
cLink as Link, ;
mDesc as Description ;
FROM trhead ;
INTO CURSOR curHead
* Read news items
Select TOP 10 cTitle as Title, ;
tUpdated as pubDate, ;
mContent as Description, ;
cLink as link ;
FROM trweb ;
ORDER BY tUpdated descending ;
INTO CURSOR curItem
* Generate the items - body'
SELECT curItem
SET textmerge TO memvar lcXML additive
SET TEXTMERGE ON noshow
SCAN
\
\
\
\
\<
\
ENDSCAN
SET TEXTMERGE off
SET TEXTMERGE to
* Generate the heading and channel items and embed
* the body within
Set Textmerge To Memvar lcContents
Set Textmerge On Noshow
\
\
\
\
\
\ <
\
\
\
\
\
\
\
\
\ <
\
\
\
Set Textmerge Off
Set Textmerge To
* Write it out
lcSafety = Set("Safety")
Set Safety Off
Strtofile(lcContents, lcFileName, 0)
Set Safety &lcSafety
FUNCTION HTMLFix(tcString)
* This code ASSUMES the incoming string is ANSI,
* CHR(32) to (127) and has not already had the
* characters converted - it will make a mess of a
* string that already has strings like — in it.
LOCAL lcString as string
lcString = STRTRAN(tcString,"&","&")
lcString = STRTRAN(lcString,"<","<")
lcString = STRTRAN(lcString,">",">")
RETURN ALLTRIM(lcString)
ÏÂÃæ¿´Ò»Ï´úÂëÖз¢ÉúÁËʲô¡£curItems Óαê°üº¬ÃûΪ¡°title¡±¡¢¡°description¡±ºÍ¡°link¡±µÄ×ֶΣ¬ÓÃÓÚÆ¥Åä XML Ö÷ÌåËùÐèµÄÏî¡£ÔÚÔ´±íÖУ¬ÕâЩ×ֶα»ÏàÓ¦µØÃüÃûΪ cTitle¡¢mDesc ºÍ cLink£¬µ«ÊÇËüÃDZ»Éú³ÉÓαêµÄ SQL SELECT Óï¾äÖеıðÃû¼ÓÒÔ¸ü¸Ä¡£ÔÚ¸ü¶à¼¸¸ö´úÂëÐÐÖУ¬ÏîÄ¿ÁбíÊÇͨ¹ý scan ºÍ textmerge Éú³ÉµÄ¡£È»ºó£¬Óà textmerge Éú³ÉÖ÷Îĵµ£¬´Ó curHead ÓαêÈ¡³öÖµ£¬²¢¶ÔÆäËûÖµ£¨Èç¹ûÄúÐèÒªÀ©Õ¹¸ÃʾÀý£¬Ò²¿ÉÒÔ½«ÕâЩֵ°üº¬ÔÚ curHead ÓαêÖУ©½øÐÐÓ²±àÂë¡£×îºó£¬Óà StrToFile() д³öÎļþ¡£
RFC822Date() º¯ÊýÊÇÒ»¸ö¼òµ¥µÄ UDF£¬°üº¬ËüÊÇΪÁ˽«ËùÌṩµÄ FoxPro datetime ֵת»»Îª RSS 2.0 ¹æ·¶ËùÐèµÄ RFC 822 ¸ñʽ£¬Èç¡°Thu, 27 Feb 2003 14:11:12 GMT¡±¡££¨RSS 1.0 ¹æ·¶ÒªÇóÒ»ÖÖÓÉ ISO 8601 Ö¸¶¨µÄ²»Í¬¸ñʽ£¬Æä¸ñʽΪ YYYY-MM-DDTHH:MM:SSZ¡££©Ö´ÐÐÕâÁ½ÖÖת»»ËùÐèµÄÓû§¶¨ÒåµÄº¯Êý°üº¬ÔÚËæ¸½µÄÏÂÔØ×ÊÁÏÖС£×Ö·û´®´ÓÆä¹Ì¶¨¿í¶ÈµÄ±í³¤¶ÈÖмô²Ãµô£¬²¢ÇÒ and ·ûºÅ¡¢´óÓںźÍСÓÚºÅÓÉ HTMLFix() UDF ÖеĵÈЧ×Ö·ûÌæ»»¡£
Óà Visual FoxPro Éú³É RSS ¾ÛºÏÐÂÎÅ¿ìËÙ¶øÓÐЧ£¬²¢ÇÒʹ³ÌÐòÔ±Äܹ»¿ØÖÆÐ´Èë´ÅÅ̵Äÿ¸ö×Ö½Ú¡£×÷Ϊ½»»»Ìõ¼þ£¬³ÌÐòÔ±±ØÐëÈ·±£¸ñʽÍêÈ«ÕýÈ·£¬²¢ÇÒÈç¹ûÐèÒªµÄ»°£¬»¹ÒªÈ·±£½øÐÐ×Ö·ûת»»¡£
·µ»ØÒ³Ê×
ʹÓà MSXML COM ¶ÔÏóÉú³É RSS
ʹÓà XML ´¦ÀíÆ÷£¨Èç MSXML COM ¶ÔÏó£©Éú³É RSS ÔÚ¿ªÊ¼¿ÉÄÜ»áÓÐÒ»µã¸´ÔÓºÍÈß³¤£¬µ«ËüȷʵÓÐijЩÓÅÊÆ¡£´ÓÃæÏò¶ÔÏóµÄ¹ÛµãÀ´Ëµ£¬Ê¹Óà COM ¶ÔÏó»áÇáËÉһЩ»ò¡°¸üÕýÈ·¡±Â𣿿ÉÄܲ»»á¡£Èκη½·¨¶¼¿ÉÒÔÖØÐ¹¹½¨µ½Êʵ±µÄ¶ÔÏóºÍ·½·¨¼¯ÖС£XML ·ÖÎöÆ÷ÖªµÀÐèÒª½«Îı¾ÖµÕýÈ·±àÂëÒÔÉú³ÉÓÐЧµÄ XML£¬Ëü»¹½«×Ô¶¯Ö´ÐбàÂ룬»òÒý·¢ÄúµÄ´úÂë±ØÐë´¦ÀíµÄ´íÎó¡£µ«Ëü²»»áÉú³ÉÎÞЧµÄ XML£¬¶ø Visual FoxPro textmerge Ä£¿éÈ´¿ÉÒÔÉú³É¡£
´´½¨ XML ÎĵµµÄϸ½ÚÏ൱¼òµ¥£ºµ÷Óà MSXML COM ¶ÔÏó£¬È»ºó¸æËßËü´´½¨Ò»¸öÐÂÎĵµ¡£´Ëʱ£¬¹¹½¨ËùÐèÎĵµµÄ¹ý³Ì°üÀ¨£ºÌí¼ÓÔªËØºÍÊôÐÔ£¬ÒÔ¼°ÎªËüÃÇÖ¸¶¨Öµ¡£Èç¹ûÄúÊÇ XML µÄ³õѧÕߣ¬Çë×¢Òâ£¬ÔªËØÊÇÓüâÀ¨ºÅ±ê¼ÇÀ¨ÆðÀ´µÄÒ»¸ö½Úµã¡£Ã¿¸öÔªËØ¶¼ÒÔÒ»¸ö¿ªÊ¼±ê¼Ç£¨Èç £©¿ªÍ·£¬²¢ÒÔÒ»¸ö½áÊø ±ê¼Ç½áβ¡£ÊôÐÔÊÇÔªËØ±ê¼ÇÖеÄÒ»¸öÃû-Öµ¶Ô£¬ËüÃèÊöÔªËØµÄÊôÐÔ¡£Èç¹ûÎÒ½«Ò»¸ö XMLns ÊôÐÔÌí¼Óµ½ÏîÄ¿±ê¼ÇÖУ¬Ëü½«±äΪ ¡£ÒÔÏ´úÂëÑÝʾÁ˹ý³ÌÈçºÎ¿ªÊ¼£ºËü»á´´½¨Ò»¸ö XML Îĵµ£¬²¢Ìí¼Ó×î³õµÄ¼¸¸öÔªËØºÍÊôÐÔ¡£´úÂëÆäÓಿ·ÖµÄÖØ¸´ÐԺܸߣ¬ËüÔÚÏÂÔØ×ÊÁÏÖÐÌṩ¡£
loXML = newobject('msXML2.domdocument.4.0')
loXML.async = .f.
* Create the XML root
loNewItem = loXML.CreateProcessingInstruction([XML], ;
[version='1.0' encoding='iso-8859-1'])
loXML.appendChild(loNewItem)
* Create the RSS root element
loDocument = loXML.createElement('rss')
loXML.appendChild(loDocument)
* Add the RSS Version number
loAttribute = loXML.createAttribute([version])
loAttribute.value="2.0"
loDocument.attributes.setNamedItem(loAttribute)
* Add the channel element
loElement = loXML.createElement("channel")
loChannel = loDocument.appendChild(loElement)
µ± RSS Êý¾ÝÍêÈ«Ìí¼Óµ½ XML ·ÖÎöÆ÷Ö®ºó£¬Í¨¹ý´Ó loXML.XML ÊôÐÔÖÐÌáÈ¡×Ö·û´®»òµ÷ÓÃÄÚ²¿µÄ loXML.Save() ·½·¨£¬½«Êý¾Ý±£´æµ½´ÅÅÌÉÏ¡£ÆÚ¼ä³öÏֵĴíÎó¿ÉÒÔÓôíÎó´¦Àí³ÌÐò²¶»ñ£¬È»ºó½øÐÐÏàÓ¦µÄ´¦Àí£¨ÕâÊÇʹÓà VFP8 Ð嵀 TRY...CATCH ½á¹¹»¯´íÎó´¦Àí³ÌÐòµÄºÃµØ·½£©¡£ÓÉÓÚÎÒʹÓÃÕâЩº¯Êý²¢²»ÊÇÒµÎñ±ØÐèµÄ£¬Òò´ËֻѡÔñ½«´íÎó¼Ç¼µ½Ò»¸ö´íÎóÎļþÖУ¬²¢Í˳öÉú³É¹ý³Ì¡£ÄúµÄ´íÎó´¦Àí·½Ê½½«·´Ó³ÄúµÄÐèÒª¡£
·µ»ØÒ³Ê×
С½á
Visual FoxPro ÊÇÉú³ÉÓë´¦Àí RSS ÎĵµµÄ¼«¼Ñ¹¤¾ß¡£ÓÉÓÚ RSS Ö»ÊÇ XML£¬¶ø XML Ö»²»¹ýÊÇÎı¾£¬FoxPro µÄÄÚÖÃÎı¾²Ù×÷¹¦ÄÜ¿ÉÒÔʹ RSS µÄÉú³É¼È¿ìËÙÓÖ¼òµ¥¡£ÓÉÓÚ Visual FoxPro »¹ÊÇ COM ¶ÔÏóµÄÁ¼ºÃËÞÖ÷£¬Òò´ËÓÉ VFP Çý¶¯µÄ XML ·ÖÎöÆ÷ÊÇÁíÒ»ÏîÊÊÓõļ¼Êõ¡£ÄúËù×÷µÄÑ¡ÔñÈ¡¾öÓÚÄúµÄÌØ¶¨»·¾³ºÍÓ¦ÓóÌÐòÐèÇó¡£

