我正在尝试将我的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
答案 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序列化。