|
C# - XML Parser
by Charles Carroll
Here is the XML Parser:
filename=/experiments/xmlparser/xmlparser.aspx
<%@ Assembly src="/experiments/utilitybelt/vercurrent/utilitybelt.vb" %>
<%@ trace="true" debug ="true"%>
<%@ import Namespace="System.Xml"%>
<%@ import Namespace="System.IO"%>
<%@ import Namespace="LearnASP"%>
<script language="c#" runat="server">
UtilityBelt ub1=new UtilityBelt();
protected void Page_Load(Object S, EventArgs E)
{
Trace.TraceMode = TraceMode.SortByTime;
Hashtable htl = new Hashtable();
htl.Add("asin","0932956203");
htl.Add("type","heavy");
string strAmazonResult = ub1.wsAmazonASINSearch(htl);
// XmlParse_v1(strAmazonResult);
// XmlParse_v2(strAmazonResult);
// XmlParse_v3(strAmazonResult,"ProductName,ListPrice,OurPrice,UsedPrice,Author,Rating");
Hashtable HtAmazon1=new Hashtable();
HtAmazon1=XmlParse_v4(strAmazonResult,"ProductName,ListPrice,OurPrice,UsedPrice,Author,Rating");
HTPrinter(HtAmazon1);
litAmazon.Text=Server.HtmlEncode(strAmazonResult);
} // end page_load
private void XmlParse_v1(string strAmazonResult)
{
System.Xml.XmlTextReader xmlrt1 = new XmlTextReader(new StringReader(strAmazonResult));
while(xmlrt1.Read())
{
//Trace.Write("Node Type", xmlrt1.NodeType.ToString());
string strNodeType=xmlrt1.NodeType.ToString();
string strName=xmlrt1.Name;
if(strNodeType=="Element" && strName=="OurPrice")
{
xmlrt1.Read();
Trace.Write("OurPrice", xmlrt1.Value);
} // end if
if(strNodeType=="Element" && strName=="AvgCustomerRating")
{
xmlrt1.Read();
Trace.Write("average customer rating",xmlrt1.Value);
} // end if
if(strNodeType=="Element" && strName=="Author")
{
xmlrt1.Read();
Trace.Write("author",xmlrt1.Value);
} // end if
} // end while
} // end XmlParse_v1
private void XmlParse_v2(string strAmazonResult)
{
System.Xml.XmlTextReader xmlrt1 = new XmlTextReader(new StringReader(strAmazonResult));
while(xmlrt1.Read())
{
//Trace.Write("Node Type", xmlrt1.NodeType.ToString());
if( xmlrt1.NodeType.ToString().Equals("Element") )
{
switch (xmlrt1.Name)
{
case "OurPrice":
xmlrt1.Read();
Trace.Write("our price", xmlrt1.Value);
break;
case "AvgCustomerRating":
xmlrt1.Read();
Trace.Write("average customer rating",xmlrt1.Value);
break;
case "Author":
xmlrt1.Read();
Trace.Write("author",xmlrt1.Value);
break;
} // end switch
} // end if
} // end while
} // end XmlParse_v2
private void XmlParse_v3(string strAmazonResult , string strEleName )
{
strEleName="," + strEleName+ ",";
XmlTextReader xmlrt1 = new XmlTextReader(new StringReader(strAmazonResult));
while(xmlrt1.Read())
{
if( xmlrt1.NodeType.ToString().Equals("Element"))
{
string strName=xmlrt1.Name;
if(strEleName.IndexOf("," + strName + ",")>-1)
{
xmlrt1.Read();
Trace.Write(strName,xmlrt1.Value);
} // end if
} // end if
} // end while
} // end XmlParse_v3
private Hashtable XmlParse_v4(string strAmazonResult , string strEleName)
{
strEleName="," + strEleName+ ",";
Hashtable ht = new Hashtable();
XmlTextReader xmlrt1 = new XmlTextReader(new StringReader(strAmazonResult));
int i =0;
while(xmlrt1.Read())
{
if( xmlrt1.NodeType.ToString().Equals("Element") )
{
string strName=xmlrt1.Name;
if(strEleName.IndexOf("," + strName + ",")>-1)
/*
or as Jeff SchoolCraft would do it...
if( xmlrt1.NodeType.ToString().Equals("Element") )
{
string strName=xmlrt1.Name;
re = new Regex(strName);
if(re.IsMatch(strEleName))
*/
{
xmlrt1.Read();
if(!ht.Contains(strName))
{
ht.Add(strName,xmlrt1.Value);
i=1;
} // end if
else
{
i++;
ht.Add(strName+(i).ToString(),xmlrt1.Value);
} // end else
} // end if
} // end if
} // end while
return ht;
} // end XmlParse_v4
private void HTPrinter(Hashtable htParm)
{
foreach (DictionaryEntry d in htParm)
{
Trace.Write (d.Key.ToString(),d.Value.ToString());
} // end foreach
} // end HTPrinter
</script>
<html><head>
<title>XMLParser Tricks</title>
</head>
<body bgcolor="#FFFFFF">
<asp:literal id="litAmazon" EnableviewState="false" runat="server" />
<form runat="server">
</form>
</body></html>
|