|
I'm going to guess what you are trying to do, but it may be way off.
AMMAR ALNAJIM wrote: because the category name don't appear in properties Sounds like the CategoryAttribute in a PropertyGrid. It would display the property in a separate category, if the property is decorated with it.
AMMAR ALNAJIM wrote: i need to add option in proprieties of performance counter So I'd be guessing you want that attribute on another property - but you can't change the code of the performance-counter class.
Anyway, this[^] might be interesting to you.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Hello
I have created a Form in C# and use DataGridView out there. As rows keep getting updated in the DataGridView, it works ok initially. However when I have to scroll down to see the rows added, the software freezes. The rows do get added, but I can't see them. I can only see the rows which get displayed initially in the window (without using scroll).
Where is the problem? Is it with the scroll?
Any help would be appreciated.
Thanks
Deepak
|
|
|
|
|
Member 13419803 wrote: Where is the problem? Most likely somewhere in your code, but it is anyone's guess where. You need to gather some more detailed information about what is happening.
|
|
|
|
|
Member 13419803 wrote: However when I have to scroll down to see the rows added, the software freezes Might be busy getting data, formatting it; which events did you hookup?
I'd also assume you're databinding. That will cause a slight delay when loading the data. If you don't want that delay, you could consider running in virtual mode[^].
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
my code is :
string word = "hello helloworld worldhello";
string[] lis = word.Split(' ');
foreach (string words in lis)
{
Regex rx = new Regex(reg, RegexOptions.IgnoreCase);
Match m = rx.Match(word);
word = word.Replace(words, " ");
}
richTextBox1.Text= word;
I put the "reg" string in my code as a comment to indicate that it doest work as expected
the output was :
world world
but I want :
helloworld worldhello
in other words I want to replace hello as a whole word only any help?
thanks
|
|
|
|
|
|
it doesn't work at all with me
|
|
|
|
|
I think you are getting a bit confused here, you appear to be using two different method to do the same thing, but both of them half-heartedly. You never check if the match worked for example!
The simplest way to do this is to throw away the Regex - since you aren't actually using it at all - and just use the Split:
string words = "hello helloworld worldhello";
string[] lis = word.Split(' ');
List<string> outp = new List<string>();
foreach (string word in lis)
{
if (word != "hello")
{
outp.Add(word);
}
}
words = string.Join(" ", outp);
Console.WriteLine(words);
If you want to use a Regex, then it's not too bad:
string words = "hello helloworld worldhello";
words = Regex.Replace(words, @"\b" + "hello" + "\b", "");
Console.WriteLine(words);
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I'm trying to figure out how to handle multiple exceptions based off my code. I want to have an error for API, one for Tracking Number, and then one for if the XML isn't formatted for the entire XML. Would using try catch for each be the best method and if so how would I code that. The code in bold is what I need assistance with in regards for Tracking Number and API Here is what I have currently:
try
{
if (bool.Parse(WebConfigurationManager.AppSettings["Debug"]) == true)
File.WriteAllText(Path.Combine(Server.MapPath("Log"), DateTime.Now.ToString("MMddyyy_HHmmss") + ".xml"), xmlRequest);
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.LoadXml(xmlRequest);
string method = doc.FirstChild.Name;
XmlNode mainNode = doc.FirstChild;
if (method.ToLower() == "xml")
{
method = doc.FirstChild.NextSibling.Name;
mainNode = doc.FirstChild.NextSibling;
}
if (method == "AmazonTrackingRequest")
{
Data.General.Shipment prc = new Data.General.Shipment();
string pronum = mainNode.SelectSingleNode("TrackingNumber")?.InnerText;
prc.GetByProNumber(decimal.Parse(pronum));
rspxml.Root.Add(new XElement("API", "4.0"));
rspxml.Root.Add(new XElement("PackageTrackingInfo"));
rspxml.Root.Element("PackageTrackingInfo").Add(new XElement("TrackingNumber", prc.ProNumber.ToString()));
rspxml.Root.Add(new XElement("PackageDestinationLocation"));
rspxml.Root.Element("PackageDestinationLocation").Add(new XElement("City", prc.Consignee.ToString()));
rspxml.Root.Element("PackageDestinationLocation").Add(new XElement("StateProvince", prc.Consignee.ToString()));
rspxml.Root.Element("PackageDestinationLocation").Add(new XElement("PostalCode", prc.Consignee.ToString()));
rspxml.Root.Element("PackageDestinationLocation").Add(new XElement("CountryCode", prc.Consignee.ToString()));
rspxml.Root.Add(new XElement("PackageDeliveryDate"));
rspxml.Root.Element("PackageDeliveryDate").Add(new XElement("ScheduledDeliveryDate", prc.Consignee.ToString()));
rspxml.Root.Element("PackageDeliveryDate").Add(new XElement("ReScheduledDeliveryDate", prc.Consignee.ToString()));
rspxml.Root.Add(new XElement("TrackingEventHistory"));
foreach (Saia.Data.General.Shipment.HistoryItem itm in prc.History)
{
rspxml.Root.Add(new XElement("TrackingEventDetail"));
rspxml.Root.Element("TrackingEventDetail").Add(new XElement("EventStatus", prc.History.ToString()));
rspxml.Root.Element("TrackingEventDetail").Add(new XElement("EventReason", prc.History.ToString()));
rspxml.Root.Element("TrackingEventDetail").Add(new XElement("EventDateTime", prc.History.ToString()));
rspxml.Root.Add(new XElement("EventLocation"));
}
}
}
catch (CodeException e)
{
Error here
}
catch (Exception e)
{
Error here
}
return rspxml.ToString();
}
}
}
|
|
|
|
|
The code you're using to build the XML can be greatly simplified:
rspxml.Root.Add(
new XElement("API", "4.0"),
new XElement("PackageTrackingInfo",
new XElement("TrackingNumber", prc.ProNumber)
),
new XElement("PackageDestinationLocation",
new XElement("City", prc.Consignee),
new XElement("StateProvince", prc.Consignee),
new XElement("PostalCode", prc.Consignee),
new XElement("CountryCode", prc.Consignee)
),
new XElement("PackageDeliveryDate",
new XElement("ScheduledDeliveryDate", prc.Consignee),
new XElement("ReScheduledDeliveryDate", prc.Consignee)
),
new XElement("TrackingEventHistory",
prc.History.Select(item => new XElement("TrackingEventDetail",
new XElement("EventStatus", item.EventStatus),
new XElement("EventReason", item.EventReason),
new XElement("EventDateTime", item.EventDateTime),
new XElement("EventLocation", item.EventLocation)
)
)
);
This will also fix the problem you currently have where elements are appended to the wrong parent - particularly within the "history" loop.
Now you just need to explain what the problem is, and why you're still mixing XmlDocument and XDocument documents.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
The problem is, not really a problem, I have error codes for the Tracking Number and API Version XElement that I want to using exceptions like this:
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_101</ErrorDetailCode><ErrorDetailCodeDesc>INVALID TRACKING NUMBER</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
So for instance when there is an invalid Tracking Number I want the xml to read this error_101 code.
As for XMLDocument and XDocument, what are your suggestions for those?
|
|
|
|
|
Firstly, that's not a valid XML document. You either need to remove the closing </AmazonTrackingResponse> tag, or insert the opening tag.
Secondly, you would read it in the same way as any other XML document:
var rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF-8\"?><AmazonTrackingResponse><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_101</ErrorDetailCode><ErrorDetailCodeDesc>INVALID TRACKING NUMBER</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
var errorInfo = rspxml.Descendants("TrackingErrorInfo").FirstOrDefault();
if (errorInfo != null)
{
string trackingNumber = (string)errorInfo.Element("TrackingNumber");
var detail = errorInfo.Element("TrackingErrorDetail");
if (detail != null)
{
string errorCode = (string)detail.Element("ErrorDetailCode");
string errorMessage = (string)detail.Element("ErrorDetailCodeDesc");
}
}
As for the XmlDocument vs XDocument , I'd suggest choosing one and sticking to it. The XDocument is generally easier to work with.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Yeah I just post part of that tag. I didn't want to post the entire thing so that's why the beginning tag isn't showing here.
Also how would I check for errors on
rspxml.Root.Add(new XElement("APIVersion", "4.0"));
and I have an error code for if 'XML is not well formed', how would I do that one.
And thanks on using one between XMLDocument or XDocument.
modified 19-Sep-17 12:13pm.
|
|
|
|
|
rspxml.Root.Add(
new XElement("API", "4.0"),
new XElement("PackageTrackingInfo",
new XElement("TrackingNumber", prc.ProNumber)
),
new XElement("PackageDestinationLocation",
new XElement("City", prc.Consignee),
new XElement("StateProvince", prc.Consignee),
new XElement("PostalCode", prc.Consignee),
new XElement("CountryCode", prc.Consignee)
),
new XElement("PackageDeliveryDate",
new XElement("ScheduledDeliveryDate", prc.Consignee),
new XElement("ReScheduledDeliveryDate", prc.Consignee)
),
new XElement("TrackingEventHistory",
prc.History.Select(item => new XElement("TrackingEventDetail",
new XElement("EventStatus", item.EventStatus),
new XElement("EventReason", item.EventReason),
new XElement("EventDateTime", item.EventDateTime),
new XElement("EventLocation", item.EventLocation)
)
)
);
@RichardDeeming, Question about this code. On the
new XElement("TrackingEventHistory",
prc.History.Select(item => new XElement("TrackingEventDetail",
line what should that be because you have .Select but that gives me an error 'Shipment.HistoryCollection' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'Shipment.HistoryCollection' could be found (are you missing a using directive or an assembly reference?)
Is that code I should use and need to add something to eliminate the error. What I was thinking it should be is:
new XElement("TrackingEventHistory",
new XElement("TrackingEventDetail",
new XElement("EventStatus", prc.History),
new XElement("EventReason", prc.History),
new XElement("EventDateTime", prc.History),
new XElement("EventLocation", prc.History)
|
|
|
|
|
Select is a Linq statement.
Try adding the proper using statement to the top of your class.
using System.Linq;
using System.Xml.Linq;
If those do not work you may need to cast your object to something else.
|
|
|
|
|
I already have these
using System.Linq;
using System.Xml.Linq;
You mentioned Cast to something else but not sure what to do there. Anyone else with any suggestions would be appreciated.If no one has any suggestions then I will have to go back to the ToString code I had previously and just go with that.
This is what I have now:
public string ProcessXML(string xmlRequest)
{
XDocument rspxml = null;
try
{
if (bool.Parse(WebConfigurationManager.AppSettings["Debug"]) == true)
File.WriteAllText(Path.Combine(Server.MapPath("Log"), DateTime.Now.ToString("MMddyyy_HHmmss") + ".xml"), xmlRequest);
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.LoadXml(xmlRequest);
string method = doc.FirstChild.Name;
XmlNode mainNode = doc.FirstChild;
if (method.ToLower() == "xml")
{
method = doc.FirstChild.NextSibling.Name;
mainNode = doc.FirstChild.NextSibling;
}
if (method == "AmazonTrackingRequest")
{
Saia.Data.General.Shipment prc = new Data.General.Shipment();
string pronum = mainNode.SelectSingleNode("TrackingNumber").InnerText;
prc.GetByProNumber(decimal.Parse(pronum));
if (string.IsNullOrEmpty(pronum))
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion >4.0</APIVersion><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_101</ErrorDetailCode><ErrorDetailCodeDesc>INVALID TRACKING NUMBER</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
}
else
{
decimal tn = 0.0m;
if (decimal.TryParse(pronum, out tn))
{
prc.GetByProNumber(tn);
}
else
{
Console.WriteLine("Unable to parse '{0}'.", pronum);
}
}
rspxml = XDocument.Parse("<AmazonTrackingResponse xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'></AmazonTrackingResponse>");
rspxml.Root.Add(new XElement("APIVersion", "4.0"));
var errorInfo = rspxml.Descendants("TrackingErrorInfo").FirstOrDefault();
if (errorInfo != null)
{
string packtrackinginfo = (string)errorInfo.Element("PackageTrackingInfo");
var detail = errorInfo.Element("TrackingErrorDetail");
if (detail != null)
{
string errorCode = (string)detail.Element("ErrorDetailCode");
string errorMessage = (string)detail.Element("ErrorDetailCodeDesc");
}
}
rspxml.Root.Add(
new XElement("API", "4.0"),
new XElement("PackageTrackingInfo",
new XElement("TrackingNumber", prc.ProNumber)
),
new XElement("PackageDestinationLocation",
new XElement("City", prc.Consignee),
new XElement("StateProvince", prc.Consignee),
new XElement("PostalCode", prc.Consignee),
new XElement("CountryCode", prc.Consignee)
),
new XElement("PackageDeliveryDate",
new XElement("ScheduledDeliveryDate", prc.Consignee),
new XElement("ReScheduledDeliveryDate", prc.Consignee)
),
new XElement("TrackingEventHistory",
new XElement("TrackingEventDetail",
new XElement("EventStatus", prc.History),
new XElement("EventReason", prc.History),
new XElement("EventDateTime", prc.History)
),
new XElement("EventLocation",
new XElement("Street1", prc.History),
new XElement("City", prc.History),
new XElement("StateProvince", prc.History),
new XElement("PostalCode", prc.History),
new XElement("CountryCode", prc.History),
new XElement("SignedForByName", prc.History)
),
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date", prc.History),
new XElement("UTCOffset", prc.History)
),
new XElement("PickupID",
new XElement("StoreName",
new XElement("LocationID",
new XElement("StoreLocation",
new XElement("Street1", prc.History),
new XElement("City", prc.History),
new XElement("StateProvince", prc.History),
new XElement("PostalCode", prc.History),
new XElement("CountryCode", prc.History)
)
)
)
)
)
)
);
}
}
catch (CodeException e)
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion>4.0</APIVersion ><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_203</ErrorDetailCode><ErrorDetailCodeDesc>XML DOCUMENT NOT WELL FORMED</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
Core.Framework.Debug.CodeException(xmlRequest, e);
}
catch (Exception e)
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion>4.0</APIVersion ><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_203</ErrorDetailCode><ErrorDetailCodeDesc>XML DOCUMENT NOT WELL FORMED</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
Core.Framework.Debug.Exception(xmlRequest, e);
}
return rspxml.ToString();
}
public class EventCode
{
public enum EvCodes {Delivered, DispatchedForDelivery, DepartedFromTerminal, ArrivedAtDestinationTerminal, DNF};
public static void Main()
{
string val = "Dispatched For Delivery";
switch ((EvCodes)Enum.Parse(typeof(EvCodes), val.Replace(" ", "")))
{
case EvCodes.DispatchedForDelivery:
case EvCodes.Delivered:
Console.WriteLine("EVENT_301");
break;
case EvCodes.DepartedFromTerminal:
Console.WriteLine("EVENT_202");
break;
case EvCodes.ArrivedAtDestinationTerminal:
Console.WriteLine("EVENT_202");
break;
case EvCodes.DNF:
Console.WriteLine("EVENT_101");
Console.WriteLine("EVENT_102");
break;
default:
break;
}
}
}
}
}
modified 20-Sep-17 9:27am.
|
|
|
|
|
What interfaces are implemented by Shipment.HistoryCollection ?
Presumably it implements IEnumerable , but not IEnumerable<T> ; in which case, you need to insert a call to Cast[^] before the call to Select :
new XElement("TrackingEventHistory",
prc.History.Cast<Saia.Data.General.Shipment.HistoryItem>().Select(item => new XElement("TrackingEventDetail",
new XElement("EventStatus", item.EventStatus),
new XElement("EventReason", item.EventReason),
new XElement("EventDateTime", item.EventDateTime),
new XElement("EventLocation", item.EventLocation)
)
)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
OK this is what I have now and it seems to be working. A couple of questions/issues:
1. If you look at the commented out code below with the .ToString, I have PickupStoreInfo and then PickupDueDateDetails which is setup similar to the TrackingEventHistory and TrackingEventDetail, so would that be set up the same way with the Cast or should that be setup differently or is it ok like it is now.
rspxml.Root.Add(new XElement("PickupStoreInfo"));
2. You mentioned about using one of either XDocument or XmlDocument, I tried this and when I change to XDocument on this line:
XmlDocument doc = new XmlDocument();
I get errors 'XDocument' does not contain a definition for 'XmlResolver' and no extension method 'XmlResolver' accepting a first argument of type 'XDocument' could be found (are you missing a using directive or an assembly reference?).
Same error definition for FirstChild, LoadXML.
If I change everything to XmlDocument like on this line from XDocument to XmlDocument:
rspxml = XDocument.Parse
I get 'XmlDocument does not contain definition for 'Parse'.
3.Is all of my syntax correct, specifically all of the parentheses after this line:
new XElement("CountryCode", prc.History)
I really appreciate all of your help and look forward to your response.
Here is the full code for this method:
public string ProcessXML(string xmlRequest)
{
XDocument rspxml = null;
try
{
if (bool.Parse(WebConfigurationManager.AppSettings["Debug"]) == true)
File.WriteAllText(Path.Combine(Server.MapPath("Log"), DateTime.Now.ToString("MMddyyy_HHmmss") + ".xml"), xmlRequest);
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.LoadXml(xmlRequest);
string method = doc.FirstChild.Name;
XmlNode mainNode = doc.FirstChild;
if (method.ToLower() == "xml")
{
method = doc.FirstChild.NextSibling.Name;
mainNode = doc.FirstChild.NextSibling;
}
if (method == "AmazonTrackingRequest")
{
Saia.Data.General.Shipment prc = new Data.General.Shipment();
string pronum = mainNode.SelectSingleNode("TrackingNumber").InnerText;
prc.GetByProNumber(decimal.Parse(pronum));
if (string.IsNullOrEmpty(pronum))
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion >4.0</APIVersion><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_101</ErrorDetailCode><ErrorDetailCodeDesc>INVALID TRACKING NUMBER</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
}
else
{
decimal tn = 0.0m;
if (decimal.TryParse(pronum, out tn))
{
prc.GetByProNumber(tn);
}
else
{
Console.WriteLine("Unable to parse '{0}'.", pronum);
}
}
rspxml = XDocument.Parse("<AmazonTrackingResponse xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'></AmazonTrackingResponse>");
rspxml.Root.Add(new XElement("APIVersion", "4.0"));
var errorInfo = rspxml.Descendants("TrackingErrorInfo").FirstOrDefault();
if (errorInfo != null)
{
string packtrackinginfo = (string)errorInfo.Element("PackageTrackingInfo");
var detail = errorInfo.Element("TrackingErrorDetail");
if (detail != null)
{
string errorCode = (string)detail.Element("ErrorDetailCode");
string errorMessage = (string)detail.Element("ErrorDetailCodeDesc");
}
}
rspxml.Root.Add(
new XElement("API", "4.0"),
new XElement("PackageTrackingInfo",
new XElement("TrackingNumber", prc.ProNumber)
),
new XElement("PackageDestinationLocation",
new XElement("City", prc.Consignee),
new XElement("StateProvince", prc.Consignee),
new XElement("PostalCode", prc.Consignee),
new XElement("CountryCode", prc.Consignee)
),
new XElement("PackageDeliveryDate",
new XElement("ScheduledDeliveryDate", prc.Consignee),
new XElement("ReScheduledDeliveryDate", prc.Consignee)
),
new XElement("TrackingEventHistory",
prc.History.Cast<Saia.Data.General.Shipment.HistoryItem>().Select(item => new XElement("TrackingEventDetail",
new XElement("EventStatus", prc.History,
new XElement("EventReason", prc.History),
new XElement("EventDateTime", prc.History)
),
new XElement("EventLocation",
new XElement("Street1", prc.History),
new XElement("City", prc.History),
new XElement("StateProvince", prc.History),
new XElement("PostalCode", prc.History),
new XElement("CountryCode", prc.History),
new XElement("SignedForByName", prc.History)
),
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date", prc.History),
new XElement("UTCOffset", prc.History)
),
new XElement("PickupID",
new XElement("StoreName",
new XElement("LocationID",
new XElement("StoreLocation",
new XElement("Street1", prc.History),
new XElement("City", prc.History),
new XElement("StateProvince", prc.History),
new XElement("PostalCode", prc.History),
new XElement("CountryCode", prc.History)
)
)
)
)
)
)
)
)
);
}
}
catch (CodeException e)
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion>4.0</APIVersion ><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_203</ErrorDetailCode><ErrorDetailCodeDesc>XML DOCUMENT NOT WELL FORMED</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
Core.Framework.Debug.CodeException(xmlRequest, e);
}
catch (Exception e)
{
rspxml = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF - 8\"?><AmazonTrackingResponse xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance'xsi: noNamespaceSchemaLocation='AmazonTrackingResponse.xsd'><APIVersion>4.0</APIVersion ><TrackingErrorInfo><TrackingNumber>12345678</TrackingNumber><TrackingErrorDetail><ErrorDetailCode>ERROR_203</ErrorDetailCode><ErrorDetailCodeDesc>XML DOCUMENT NOT WELL FORMED</ErrorDetailCodeDesc></TrackingErrorDetail></TrackingErrorInfo></AmazonTrackingResponse>");
Core.Framework.Debug.Exception(xmlRequest, e);
}
return rspxml.ToString();
}
|
|
|
|
|
1) It's not clear what you're trying to do here. You're not adding an element for each history item, so you don't need the Select ; you just need to pass in the correct values to the elements.
rspxml.Root.Add(new XElement("PickupDueDateDetails"),
new XElement("Date", prc.PickupDueDate),
new XElement("UTCOffset", prc.PickupDueDateOffset)
);
2) You can't just change the type and expect the existing code to work. You need to fix the existing code to use the correct methods for the type.
For example, this:
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.LoadXml(xmlRequest); would become:
XDocument doc = XDocument.Parse(xmlResult);
This:
string method = doc.FirstChild.Name;
XmlNode mainNode = doc.FirstChild;
if (method.ToLower() == "xml")
{
method = doc.FirstChild.NextSibling.Name;
mainNode = doc.FirstChild.NextSibling;
} would become:
XElement mainNode = doc.Root;
string method = mainNode.Name.LocalName;
This:
string pronum = mainNode.SelectSingleNode("TrackingNumber").InnerText; would become:
string pronum = (string)mainNode.Element("TrackingNumber");
3) I don't know. Does it compile? Does it do what you expect it to do?
I very much doubt that prc.History is the correct property to use for all of those elements.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
1) This may help explain. This is some of the XML I am trying to write out:
</PackageDeliveryDate>
<TrackingEventHistory>
<TrackingEventDetail>
<EventStatus>LK</EventStatus>
<EventReason>AQ</EventReason>
<EventDateTime>2004-08-22T11:00:00-
08:00</EventDateTime>
<EventLocation>
<City>SEATTLE</City>
<StateProvince>WA</StateProvince>
<PostalCode>98107</PostalCode>
<CountryCode>US</CountryCode>
</EventLocation>
<SignedForByName>JOHN GALT</SignedForByName>
</TrackingEventDetail>
<PickupStoreInfo>
<PickupDueDateDetails>
<Date>2004-08-25</Date>
<UTCOffset>-07:00</UTCOffset>
</PickupDueDateDetails>
<PickupID>92253</PickupID>
<StoreName>US-PRI-DEL-03</StoreName>
<LocationID>19632</LocationId>
<StoreLocation>
<Street1>NW Market St</Street1>
<City>SEATTLE</City>
<StateProvince>WA</StateProvince>
<PostalCode>98107</PostalCode>
<CountryCode>US</CountryCode>
</StoreLocation>
</PickupStoreInfo>
</TrackingEventHistory>
Am I doing a rspxml.Root.Add for each section or can I use like this:
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date", prc.History),
new XElement("UTCOffset", prc.History)
),
So based off this, how would that be written out in the code.
2) I updated the code and that seems to be working ok.
3) It does compile. And yes those are supposed to be prc.History. There are only two elements/fields that I'm concerned with and that is the Consignee and History so yes they should be prc.History. I just need to pull in the fields for in those two areas.
|
|
|
|
|
Bootzilla33 wrote:
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date", prc.History),
new XElement("UTCOffset"</span>, prc.History)
),
Since PickupDueDateDetails is a child of PickupStoreInfo , that's the correct way to do it.
But passing prc.History as the value for every node isn't going to produce the correct values in the resulting XML. Instead, you'll get the result of calling prc.History.ToString() inserted into every node.
If you don't need to pass a value in the node, it would be better to not pass a value to it, or exclude it from the document.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I have the same thing for prc.Consignee. So what would you suggest something like this:
),
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date"),
new XElement("UTCOffset")
),
I pretty much have to pass a value in the node or else how else would I get the values?
|
|
|
|
|
If you have to pass a value, then pass the value that the API is expecting. Passing the same (invalid) string for each node will most likely cause the API to return an error.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard Deeming wrote: If you have to pass a value, then pass the value that the API is expecting.
What would that be?
Something like:
new XElement("PickupStoreInfo",
new XElement("PickupDueDateDetails",
new XElement("Date", Date),
new XElement("UTCOffset", UTCOffset)
),
Not sure???
|
|
|
|
|
Pass in the values that the API is expecting you to pass in for the request.
You've presumably read the API documentation? The expected values should be documented there.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|