将web浏览器url保存为xml并重试

本文关键字:xml 重试 保存 web 浏览器 url | 更新日期: 2023-09-27 17:57:57

我正试图将我的网络浏览器控制器URL保存到一个xml文件中,但我遇到了某些字符阻止保存的问题。

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

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

保存失败。

我检查了很多东西,发现只有当url包含&<这两个字符中的任何一个时,我的代码才不会保存。

请帮帮我。

这是我的密码。。。

    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>

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

将web浏览器url保存为xml并重试

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

<![CDATA[THE URL CONTENT]]>

你的问题源于你不能使用&并且<作为XML数据,因为它们在XML中具有特殊含义:&启动XML实体,<启动一个XML标记。所以当你需要添加&并且<作为值,最容易使用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>";

您可以使用HttpUtility.HtmlEncode(url)

您的问题在这里:

docFrag.InnerXml = "<fav>" + "<Title>" + textBox1.Text + "</Title>"
                   + "<url>"+  textBox2.Text + "</url>" + "</fav>";

导致问题的<>&是XML中的标记。InnerXML不转义标记,并且这些字符按原样写入,这将导致无效的XML片段。要添加URL,请改用InnerText。它逃脱了那些角色。

要在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序列化。