0

我正在尝试解析此 XML 文档并将 guid 与链接节点匹配。我有一个用 C# 构建的 GUI,允许用户输入 guid,我试图吐出与之对应的相应链接节点。

例如。用户输入 ID:8385522,程序会输出:

http://once.www.example.com

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");

我不确定解析功能需要在哪里。

4

3 回答 3

1
var links = from item in xdoc.Descendants("item")
            where (int)item.Element("guid") == yourGuid
            select (string)item.Element("link");

但是理解语法没有用于选择单个值的关键字,因此您需要做links.SingleOrDefault();才能获取链接。

或者您可以使用 fluent 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();
于 2012-11-04T20:52:49.220 回答
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");
}
于 2012-11-04T21:22:02.160 回答
0

我正在使用这个 xml 库,但我相信您可以使用 .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");
于 2012-11-04T22:24:48.137 回答