我有一个相对较小的xml文件
<g>
<page no="1" href="page1.xml" >
<pic src="20100101001.jpg">1</pic>
<pic src="20100101002.jpg">2</pic>
<pic src="20100101003.jpg">3</pic>
</page>
<page no="2" href="page2.xml" >
<pic src="20100101011.jpg">1</pic>
<pic src="20100101012.jpg">2</pic>
<pic src="20100101013.jpg">3</pic>
</page>
<page no="3" href="page3.xml" >
<pic src="20100101021.jpg">1</pic>
<pic src="20100101022.jpg">2</pic>
<pic src="20100101023.jpg">3</pic>
</page>
</g>
我希望在win表单上有三个按钮(第1页,第2页,第3页),点击它们会在三个图片框中加载相关的3张图片(这三张图片在xml文件的同一页面下)。
我需要做的事情就像“从xml中选择page = X”
我知道我可以使用xpath(/其他xml对象)或treeview对象来做到这一点......但是我对这些对象中的任何一个都不太了解,我当然也说不出它的优点和缺点。每个...
所以我需要你的帮助:) 谢谢 阿萨夫
答案 0 :(得分:2)
@ mehmet6parmak在他的回答中写道,我建议使用LINQ to XML。这是XML数据的代码:
using System.Xml.Linq;
XDocument doc = XDocument.Load(@"C:\Path\To\XmlFile");
int pageNo = 1;
var page = e.Descendants("page").FirstOrDefault(x => x.Attribute("no").Value == pageNo.ToString());
如果你有像这样的Page和Picture类
public class Page
{
public int No {get;set;}
public string Href {get;set;}
public IList<Picture> Pictures {get;set;}
}
public class Picture
{
public string Source {get;set;}
}
您可以按如下方式从XML生成它们:
using System.Xml.Linq;
var xPage = e.Descendants("page").FirstOrDefault(x => x.Attribute("no").Value == "1");
var page = new Page
{
No = Convert.ToInt32(xPage.Attribute("no").Value),
Href = xPage.Attribute("href").Value
};
page.Pictures = xPage.Descendants("pic").Select(x => new Picture { Source = x.Attribute("src").Value }).ToList();
答案 1 :(得分:2)
这是一个涉及XPathDocument
和XPath的解决方案。对于内存而言,这比使用Linq(XDocument
)或XmlDocument
更轻,因为它不会在内存中构建DOM。对于小文件,这通常无关紧要,但XPathDocument
在大输入时会更快。
string page = "page1.xml";
XPathDocument xdoc = new XPathDocument(@"C:\tmp\smpl6.xml");
XPathNodeIterator result = xdoc.CreateNavigator()
.Select(string.Format("/g/page[@href = '{0}']/pic/@src", page));
foreach (XPathNavigator item in result)
{
Trace.WriteLine(item.Value);
}
您可以轻松更改该XPath表达式,例如按页码过滤:
int pageNo = 2;
XPathNodeIterator result = xdoc.CreateNavigator()
.Select(string.Format("/g/page[@no = '{0}']/pic/@src", pageNo));
答案 2 :(得分:1)
我建议您使用LINQ to XML
示例代码来自:link
XDocument loaded = XDocument.Load(@"C:\contacts.xml");
// Query the data and write out a subset of contacts
var q = from c in loaded.Descendants("contact")
where (int)c.Attribute("contactId") < 4
select (string)c.Element("firstName") + “ “ +
(string)c.Element("lastName");
foreach (string name in q)
Console.WriteLine("Customer name = {0}", name);