我正在尝试解析此XML文档并将guid与链接节点进行匹配。我有一个用C#构建的GUI,允许用户输入guid,我试图吐出与之对应的相应链接节点。
例如。用户输入ID:8385522,程序将吐出:
XML如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>
</title>
<link>
</link>
<description>
</description>
<language>
</language>
<lastBuildDate>
</lastBuildDate>
<item>
<title>Parsing Example</title>
<link>http://once.www.example.com</link>
<pubDate>Sun, 16 Sep 2012 02:44:02 </pubDate>
<guid>8385522</guid>
</item>
<item>
<title>Parsing Example 2</title>
<link>http://once.once.www.example2.com</link>
<pubDate>Sat, 29 Sep 2012 18:29:13 </pubDate>
<guid>8439191</guid>
</item>
</channel>
</rss>
我没有为输入ID的文本框编写任何代码。我在该字段中拥有的只有:
void TextBox1TextChanged(object sender, EventArgs e)
{
}
我是否需要将该功能放在文本框字段中?任何帮助表示赞赏。
编辑:这是我到目前为止所拥有的:
private void button2_Click_1(object sender, EventArgs e)
{
Clipboard.Clear();
if (Directory.Exists(@"c:\text"))
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"c:\text\text.xml");
XmlDocument lDoc = new XmlDocument();
lDoc.Load(@"c:\text\text.xml");
XmlNodeList ctextbox = xDoc.GetElementsByTagName("guid");
XmlNodeList link = lDoc.GetElementsByTagName("link");
我不确定解析函数的确切位置。
答案 0 :(得分:1)
var links = from item in xdoc.Descendants("item")
where (int)item.Element("guid") == yourGuid
select (string)item.Element("link");
但是理解语法没有用于选择单个值的关键字,因此您需要links.SingleOrDefault();
来获取链接。
或者您可以使用流畅的API进行搜索:
XDocument xdoc = XDocument.Load(@"c:\text\text.xml");
int guid = 8385522; // parse your guid from textbox
string link = xdoc.Descendants("item")
.Where(item => (int)item.Element("guid") == guid)
.Select(item => (string)item.Element("link"))
.SingleOrDefault();
如果可以搜索一些不在文件中的guid(看起来像你的情况,因为guid来自文本框),那么:
XDocument xdoc = XDocument.Load(@"c:\text\text.xml");
int guid = 8385525; // parse your guid from textbox
var links = from item in xdoc.Descendants("item")
where (int)item.Element("guid") == guid
select (string)item.Element("link");
string link = links.SingleOrDefault();
答案 1 :(得分:0)
string link = GetLink(@"c:\text\text.xml", "8385522");
-
string GetLink(string xmlFile,string guid)
{
var xDoc = XDocument.Load(xmlFile);
var item = xDoc.Descendants("item")
.FirstOrDefault(x => (string)x.Element("guid") == guid);
if (item == null) return null;
return (string)item.Element("link");
}
答案 2 :(得分:0)
我正在使用this xml library,但您可以使用.Net提供的XPath,包括System.Linq.XPath
我相信。 (如果这是100%准确的话,我现在无法检查。)
XElement root = XElement.Load(file);
XElement guid = root.XPathElement("//guid[.={0}]", id);
XElement link = null;
if(null != guid)
link = guid.Parent.Element("link");