symb 发表于 2009-10-11 21:03:49

如何载入XML到ListView中

本帖最后由 symb 于 2009-10-16 11:41 编辑

比如,我想用新浪的XML文件自动获取到ListView逐条列在表行上
如何编写?
我参考了RSS阅读器,还是没成功!
思路应该是这样子的
1、先自动下载新浪XML文件打开XML,并判断文件是否存在
2、再列入ListView显示,再双击打开新闻。
PS:如果再想加个combo选择不同新闻,如何写

非常感谢NEWX兄

symb 发表于 2009-10-12 12:09:13

自己顶起来~~

symb 发表于 2009-10-12 17:59:25

有没有这方面的能人?先谢谢了~

afan 发表于 2009-10-12 18:02:02

本帖最后由 afan 于 2009-10-12 19:37 编辑

用正则或ie.au3操作匹配帖子的标题及链接吧,其它的都好说

newx 发表于 2009-10-12 20:36:52

本帖最后由 newx 于 2009-10-12 20:41 编辑

给个事例,不知是不是这意思,至于XML文件中的节点是怎样的,自己参考后改一下(其实在AU3的英文官方论坛上有很多事例可作参考的:
XML.xml
<news>
   <item>
      <title>1111</title>
      <text>111111111111</text>
   </item>
   <item>
      <title>222222</title>
      <text>222222222222</text>
   </item>
</news>
GUI
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <_XMLDomWrapper.au3>
#include <GUIListView.au3>

#Region ### START Koda GUI section ### Form=
Local $msg

$Form1 = GUICreate("Form1", 595, 267, 196, 124)
$nTEMP = "XML.xml" ;可以是http://新浪的XML文件地址
_XMLFileOpen($nTEMP) ;打开XML文件
$ListView1 = GUICtrlCreateListView(" |新闻标题|新闻内容", 32, 32, 529, 201)
$ntitle = _XMLGetValue("/news/item/title")
$ntext = _XMLGetValue("/news/item/text")

Local $MyClick

For $k = 1 To UBound($ntitle)-1
   $MyClick[$k] = GUICtrlCreateListViewItem($k&"|"&$ntitle[$k]&"|"&$ntext[$k], $ListView1)
Next

GUISetState(@SW_SHOW)

GUISetState(@SW_SHOW)

While True
   $MSG = GUIGetMsg()
   Switch $MSG
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
   For $k = 1 To _GUICtrlListView_GetItemCount($ListView1)
      If $MSG = $MyClick[$k] Then
         $uTemp = StringSplit(GUICtrlRead(GUICtrlRead($ListView1)),"|")
         $utitle = $uTemp
         $utext = $uTemp
         msgbox(0,0,"新闻标题:" & $utitle & @CRLF & "新闻内容:" & $utext & @CRLF)
      EndIf
   Next
WEnd

afan 发表于 2009-10-12 21:27:34

给个事例,不知是不是这意思,至于XML文件中的节点是怎样的,自己参考后改一下(其实在AU3的英文官方论坛上有很多事例可作参考的:
XML.xml

   
      1111
      111111111111
   
   
      222222
   ...
newx 发表于 2009-10-12 20:36 http://www.autoitx.com/images/common/back.gif

用_XMLDomWrapper.au3操作确实很便捷,学习中~谢谢

sxd 发表于 2009-10-12 22:42:44

UserInclude早就有了 被大家忽视了

symb 发表于 2009-10-12 23:40:47

5# newx

方法不错,测试可行。谢谢NEWX兄
但测试用新浪地址打不开。
里面的节点我参考修改了一下,还是不行....
<item>
<title>
<!]>       
</title>               
<link>http://xxx.xxx.xxxx</link>
<description>
<!]></description>
</item>

完整的新浪XML地址:http://rss.sina.com.cn/news/marquee/ddt.xml

afan 发表于 2009-10-13 09:19:49

8# symb


$ntitle = _XMLGetValue("/rss/channel/item/title") ;标题
$ntext = _XMLGetValue("/rss/channel/item/description");内容
$nlink = _XMLGetValue("/rss/channel/item/link");链接

newx 发表于 2009-10-13 10:12:34


#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <_XMLDomWrapper.au3>
#include <GUIListView.au3>

#Region ### START Koda GUI section ### Form=
Local $msg

$Form1 = GUICreate("Form1", 595, 267, -1, -1)
$nTEMP = "http://rss.sina.com.cn/news/marquee/ddt.xml"
_XMLFileOpen($nTEMP) ;打开XML文件
$ListView1 = GUICtrlCreateListView(" |新闻标题|新闻内容", 32, 32, 529, 201)
$ntitle = _XMLGetValue("/rss/channel/item/title")
$ndescription = _XMLGetValue("/rss/channel/item/description")

Local $MyClick

For $k = 1 To UBound($ntitle)-1
   $MyClick[$k] = GUICtrlCreateListViewItem($k&"|"&$ntitle[$k]&"|"&$ndescription[$k], $ListView1)
Next

GUISetState(@SW_SHOW)

While True
   $MSG = GUIGetMsg()
   Switch $MSG
      Case $GUI_EVENT_CLOSE
         Exit
   EndSwitch
   For $k = 1 To _GUICtrlListView_GetItemCount($ListView1)
      If $MSG = $MyClick[$k] Then
         $uTemp = StringSplit(GUICtrlRead(GUICtrlRead($ListView1)),"|")
         $utitle = $uTemp
         $utext = $uTemp
         msgbox(0,0,"新闻标题:" & $utitle & @CRLF & "新闻内容:" & $utext & @CRLF)
      EndIf
   Next
WEnd

symb 发表于 2009-10-13 18:07:28

本帖最后由 symb 于 2009-10-16 11:43 编辑

10# newx


再次感谢NEWX兄~
已成功调试成功!
没想到_xmldomwrapper.au3 这么好使

又想麻烦您了,
如何使用TreeView读取INI去掉|后面的内容并相对应关联到Listview

ini配置

1=新浪新闻


1=新闻要闻|http://rss.sina.com.cn/news/marquee/ddt.xml
2=国内要闻|http://rss.sina.com.cn/news/china/focus15.xml

For $I = 1 To 9
    $IniSection = IniRead($_INI_File, "Main", $I, "None")
    If $IniSection = "None" Then ExitLoop
       $_Tree_Item[$I] = GUICtrlCreateTreeViewItem($IniSection, $TreeView)
       $IniKey = IniReadSection($_INI_File, $I)
       If @error Then ExitLoop
                For $J = 1 To $IniKey
            GUICtrlCreateTreeViewItem($IniKey[$J], $_Tree_Item[$I])
      Next
      GUICtrlSetState($_Tree_Item[$I], BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
Next

symb 发表于 2009-10-14 16:31:03

自己再顶一下~帮小弟指导指导

symb 发表于 2009-10-15 00:03:34

只可惜没有listview综合实例可学习....现变得思路有点乱了

newx 发表于 2009-10-15 23:56:59

使用分割的函数
$Val = IniRead ( "INI文件", "1", "1", "" )
;或者是 $Val = IniRead ( "INI文件", "2", "1", "" )
$Val = StringSplit ($读取的INI文件字段“1”关键字“1”中的内容,"|",1);最后一个参数1表示完整匹配“|”字符
$Val = $Val;内容是“新闻要闻”
$Val = $Val;内容是“http://rss.sina.com.cn/news/marquee/ddt.xml”

symb 发表于 2009-10-16 11:46:42

再次感谢newx兄
解决方法:
For $I = 1 To 9
    $IniSection = IniRead($_INI_File, "Main", $I, "None")
    If $IniSection = "None" Then ExitLoop
       $_Tree_Item[$I] = GUICtrlCreateTreeViewItem($IniSection, $TreeView)
          
       $IniKey = IniReadSection($_INI_File,$I)
       If @error Then ExitLoop
                For $J = 1 To $IniKey
                      ;GUICtrlCreateTreeViewItem($IniKey[$J], $_Tree_Item[$I])
                      ;改成
                      $nIniKey = StringSplit($IniKey[$J],"|",1);==>分割“|”数据
                      GUICtrlCreateTreeViewItem($nIniKey,$_Tree_Item[$I])
      Next
      GUICtrlSetState($_Tree_Item[$I], BitOR($GUI_EXPAND, $GUI_DEFBUTTON))
Next
页: [1]
查看完整版本: 如何载入XML到ListView中