将Web浏览器URL保存到xml并检索

时间:2011-05-31 08:32:36

标签: c# xml webbrowser-control

我正在尝试将我的webbrowser控制器URL保存到xml文件,但是我遇到了阻止保存的某些字符的问题。

当我打开一个这样的简单网址时:

www.saypeople.com

它成功保存,但是当我想保存这样的网页网址时:

http://scholar.google.com.pk/scholar?as_q=filetype:pdf +transistor+ AND&num=10&btnG=Search+Scholar&as_epq=&as_oq=unknown+unclear&as_eq=&as_occt=any&as_sauthors=+ &as_publication=+ &as_ylo=&as_yhi=&as_sdt=1.&as_sdtp=on&as_sdtf=&as_sdts=5&hl=en

保存失败。

我检查了很多东西,发现当网址包含&<中的任意一个时,我的代码才会保存。

请帮帮我。

这是我的代码......

    public static DialogResult Show(string Title,  String url)
    {
        MsgBox = new addfav();
        MsgBox.textBox1.Text = Title;
        MsgBox.textBox2.Text = url;
        MsgBox.ShowDialog();
        return result;


    }
    const string dataxml = "data.xml";

    private void button1_Click(object sender, EventArgs e)
    {
       //textBox2.Text containing webpage url
       //textBox1.Text containing webpage title

        try
        {
            XmlTextReader reader = new XmlTextReader(dataxml);
            XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            reader.Close();
            XmlNode currNode;

            XmlDocumentFragment docFrag = doc.CreateDocumentFragment();
            docFrag.InnerXml = "<fav>" + "<Title>" + textBox1.Text + "</Title>" + "<url>"+  textBox2.Text + "</url>" + "</fav>";
            // insert the availability node into the document 
            currNode = doc.DocumentElement;
            currNode.InsertAfter(docFrag, currNode.LastChild);
            //save the output to a file 
            doc.Save(dataxml);
            this.DialogResult = DialogResult.OK;
            MessageBox.Show("Sucessfully Added"); 
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: {0}", ex.ToString());
            this.DialogResult = DialogResult.Cancel;
        } 


        MsgBox.Close();
    }

和 如何通过在xml中搜索特定标题来检索URL。

<fav>
<Title>hello</Title>
<url><![CDATA[http://scholar.google.com.pk/scholar?as_q=filetype:pdf +hello+ AND&num=10&btnG=Search+Scholar&as_epq=&as_oq=unknown+unclear&as_eq=&as_occt=any&as_sauthors=+ &as_publication=+ &as_ylo=&as_yhi=&as_sdt=1.&as_sdtp=on&as_sdtf=&as_sdts=5&hl=en]]></url>
</fav>
<fav>
<Title>toad</Title>
<url><![CDATA[http://www.sciencedaily.com/search/?keyword=toad+ AND unknown OR unclear]]></url>
</fav>

我想在字符串中搜索并保存蟾蜍标题的网址...请帮帮我... thx

4 个答案:

答案 0 :(得分:1)

将URL包装在CDATA部分中,如:

<![CDATA[THE URL CONTENT]]>

你的问题是因为你不能使用&amp;和&lt;作为XML数据,因为它们在XML中具有特殊含义:&amp;启动一个XML实体,&lt;启动XML标记。所以当你需要添加&amp;和&lt;作为值,最简单的方法是使用CDATA部分。

修改
您可以尝试以下方法:

XmlDocumentFragment docFrag = doc.CreateDocumentFragment();
docFrag.InnerXml = "<fav>";
docFrag.InnerXml += String.Format("<Title>{0}</Title>", textBox1.Text);
docFrag.InnerXml += String.Format("<Url><![CDATA[{0}]]></Url>", textBox2.Text);
docFrag.InnerXml += "</fav>";

答案 1 :(得分:0)

您可以使用HttpUtility.HtmlEncode(url)

答案 2 :(得分:0)

你的问题在这里:

docFrag.InnerXml = "<fav>" + "<Title>" + textBox1.Text + "</Title>"
                   + "<url>"+  textBox2.Text + "</url>" + "</fav>";
导致您出现问题的

<>&是XML中的标记。 InnerXML不会转义标记,并且这些字符会被写入,因为它们会导致无效的XML片段。要添加网址,请改用InnerText。它逃脱了这些角色。

答案 3 :(得分:0)

要浏览XML文件,您必须使用此处所示的导航器。

XPathDocument xpathDoc = new XPathDocument([location of the file]);
XPathNavigator Navigator = xpathDoc.CreateNavigator();

String url_nav = "fav/url/text()";
XPathNodeIterator url_iterator = Navigator.Select(url_nav);

String URL_value = url_iterator.Current.Value;

url_iterator.MoveNext();

如果文件嵌套太多,请转到XML序列化。