将数据从xml文件中拉到c#中的列表视图

时间:2013-02-15 08:33:15

标签: c# xml

如何将数据从xml文件提取到c#中的列表视图,获取xml文档标记内的数据..

我有一个像这样的xml文件..

<?xml version="1.0"?>
<?xml-stylesheet href="file:///C:/Program Files (x86)/Nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 6.25 scan initiated Fri Feb 15 13:34:46 2013 as: nmap -T4 -A -v -oX - 10.100.95.0 10.100.95.255 -->
<nmaprun scanner="nmap" args="nmap -T4 -A -v -oX - 10.100.95.0 10.100.95.255" start="1360915486" startstr="Fri Feb 15 13:34:46 2013" version="6.25" xmloutputversion="1.04">
<scaninfo type="syn" protocol="tcp" numservices="1000" services=""/>
<verbose level="1"/>
<debugging level="0"/>
<taskbegin task="ARP Ping Scan" time="1360915488"/>
<taskend task="ARP Ping Scan" time="1360915489" extrainfo="2 total hosts"/>
<host><status state="down" reason="no-response" reason_ttl="0"/>
<address addr="10.100.95.0" addrtype="ipv4"/>
</host>
<host><status state="down" reason="no-response" reason_ttl="0"/>
<address addr="10.100.95.255" addrtype="ipv4"/>
</host>
<runstats><finished time="1360915489" timestr="Fri Feb 15 13:34:49 2013" elapsed="3.16" summary="Nmap done at Fri Feb 15 13:34:49 2013; 2 IP addresses (0 hosts up) scanned in 3.16 seconds" exit="success"/><hosts up="0" down="2" total="2"/>
</runstats>
</nmaprun>

我想在列表视图网格中的地址标记内提取 addr 地址和 addrtype 的所有列表,并在列表视图的每一行中相应地显示它..

列表应该是这样的.. Addr Addrtype 192.168.1.45 ipv4 192.164.4.56 ipv4

等。

请提前帮助我...

2 个答案:

答案 0 :(得分:1)

回答1.-使用linq to XML并在列表或集合中收集数据之后,您可以使用列表视图控件绑定数据。

回答2.-使用数据集

    Dim xmlDatapath As String = "yourxml file path\111.xml"

    Dim xmlData As String = File.ReadAllText(xmlDatapath)
    Dim stream As StringReader = New StringReader(xmlData)
    Dim reader As XmlTextReader = New XmlTextReader(stream)
    Dim xmlDS As New DataSet()
    xmlDS.ReadXml(reader)

并使用列表视图控件绑定您的数据。 我希望这会对你有所帮助。

答案 1 :(得分:0)

var xdoc = XDocument.Load(@"c:\temp\arg\s.xml");
var addrs = xdoc.Descendants().Elements("address")
               .Select(y => new {
                                 Name = y.Attribute("addr").Value, 
                                 Value =   y.Attribute("addrtype").Value
                                });

这将为您提供所需的所有地址

foreach(var addr in addrs)
{
    ListViewItem item1 = new ListViewItem(addr.Name);
    item1.SubItems.Add(addr.Value);
    //We have a ListView named listview
    listview.Items.Add(item1);
}

或者我们可以像这样简单地做到这一点

var addrs = xdoc.Descendants().Elements("address")
                   .Select(y => {
                                    ListViewItem item1 = new ListViewItem(y.Attribute("addr").Value);
                                    item1.SubItems.Add(y.Attribute("addrtype").Value);
                                    return item1;
                                });

listView.Items.AddRange(addrs);