public XmlDocument GetURIRelLink(string URL, ref string passeduri)
{
string result = string.Empty;
XmlDocument rawdata = new XmlDocument();
string rawhtml = string.Empty;
XmlDocument htmlhead = new XmlDocument();
try
{
HttpWebRequest request = null;
request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/rdf+xml";
request.ContentLength = URL.Length;
using (Stream writeStream = request.GetRequestStream())
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(URL);
writeStream.Write(bytes, 0, bytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
result = readStream.ReadToEnd();
readStream.Close();
}
responseStream.Close();
}
}
if (result.ToLower().Contains("<html"))
{
string xml = result.Substring(result.ToLower().IndexOf("<head"), (result.ToLower().IndexOf("/head>") - result.ToLower().IndexOf("<head")) - 1) + "</head>";
rawhtml = result.Substring(result.ToLower().IndexOf("<head"), (result.ToLower().IndexOf("/head>") - result.ToLower().IndexOf("<head")) - 1);
int stopindex = 0;
int startindex = rawhtml.IndexOf("alternate");
for (int i = rawhtml.IndexOf("alternate"); i < rawhtml.Length; i++)
{
if (rawhtml.Substring(i, 2) == "/>")
{
stopindex = (i + 2) - startindex;
i = rawhtml.Length;
}
}
xml = rawhtml.Substring(startindex, stopindex);
if (xml.Contains("\""))
{
xml = "<link rel=\"" + xml;
}
else if (xml.Contains("'"))
{
xml = "<link rel='" + xml;
}
htmlhead.LoadXml(xml.ToLower());
//<link rel="alternate" type="application/rdf+xml" href="/individual/n25562/n25562.rdf" />
string uri = htmlhead.SelectSingleNode("link/@href").Value;
//If a prefix of the / char or ~ exists then remove them
if (uri.Substring(0, 1) == "~")
uri = uri.Substring(2);
if (uri.Substring(0, 1) == "/")
uri = uri.Substring(1);
if (!uri.Contains("http"))
{
string[] domianparse = URL.Split('/');
uri = domianparse[0] + "//" + domianparse[2] + "/" + uri;
}
passeduri = uri;
if (passeduri.Contains(".rdf"))
{
string[] rdfparse = passeduri.Split('/');
passeduri = passeduri.Replace("/" + rdfparse[rdfparse.Length - 1], "");
}
result = this.GetURIRelLink(uri, ref passeduri).OuterXml;
}
else if (result.Contains("rdf:RDF"))
{
// do nothing, let it be loaded into the rawdata xml doc below.
}
else
{
result = "<eof/>";
}
rawdata.LoadXml(result);
}
catch (Exception ex)
{
Framework.Utilities.DebugLogging.Log(ex.Message + " ++ " + ex.StackTrace);
}
return rawdata;
}