сохранение URL веб-браузера в XML и повторное получение - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь сохранить URL-адрес моего контроллера веб-браузера в xml-файле, но у меня возникает проблема с определенными символами, препятствующими сохранению.

Когда я открываю простой URL, как это:

www.saypeople.com

Он успешно сохраняет, однако, когда я хочу сохранить URL-адрес веб-страницы следующим образом:

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();
    }

и Как я могу получить URL-адрес путем поиска конкретного заголовка в XML.

<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 заголовка жабы в строке ... пожалуйста, помогите мне ... спасибо

Ответы [ 4 ]

1 голос
/ 31 мая 2011

Оберните URL в раздел CDATA как:

<![CDATA[THE URL CONTENT]]>

Ваши проблемы возникают из-за того, что вы не можете использовать & и <в качестве XML-данных, поскольку они имеют особое значение в XML: & запускает объект XML, <запускает тег XML. Поэтому, когда вам нужно добавить & и <в качестве значений, проще всего использовать раздел CDATA. </p>

EDIT
Вы можете попробовать следующее:

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>";
0 голосов
/ 02 июня 2011

Для навигации по 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.

0 голосов
/ 31 мая 2011

Ваша проблема здесь:

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

<, > и &, которые вызвали у вас проблемы - это разметка в XML.InnerXML не экранирует разметку, и эти символы записываются в том виде, в каком они есть, что приводит к недопустимому фрагменту XML.Для добавления URL используйте InnerText.Это ускользает от этих персонажей.

0 голосов
/ 31 мая 2011

Вы можете использовать HttpUtility.HtmlEncode(url).

...