0

この XML ドキュメントを解析し、GUID とリンク ノードを照合しようとしています。ユーザーがGUIDを入力できるようにするC#で構築されたGUIがあり、それに対応する対応するリンクノードを吐き出そうとしています。

例えば。ユーザーが 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();ため、リンクを取得するために行う必要があります。

または、流暢な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 に答える