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