Laden...
M
Maliko myCSharp.de - Member
Fachinformatiker Anwendungsentwicklung Dabei seit 19.02.2012 117 Beiträge
Benutzerbeschreibung

Forenbeiträge von Maliko Ingesamt 117 Beiträge

04.09.2012 - 10:40 Uhr

Vielen Dank an euch für eure Tipps und ganz besonders danke an herbivore, das hatte ich nämlich wirklich nicht bedacht. Ich hab das Problem jetzt so gelöst, indem ich die Abfrage gesplittet habe. Ich hab das ganze jetzt über 2 Matches und dann gehts auch.

EDIT: Und hab das Gierige Verhalten in meinen Strings ausgeschaltet.

03.09.2012 - 12:49 Uhr

Hi,

sorry erst mal für die Überschrift, ich hab einfach keine Ahnung, wie ich es besser kurz beschreiben soll.

Und zwar habe ich folgendes Problem. Ich versuche via RegEx bestimmte Elemente in einer HTML Datei zu lokalisieren, um diese dann zu Speichern. Nun ist aber das problem, das er mir von 20 Ergebnissen im Onlinetool nur 16 ausgibt, obwohl alle 20 absolut identisch sind und im Compiler bekomme ich gar keine Ergebnisse, da ich sobald ich versuche die MatchCollection anzusprechen (matchCollection.Count), nen Timeout bekomme.

Darum habe ich mir eine Foreach-Schleife erstellt, welche in jedem Durchlauf einfach einen Counter Hochzählt. Das ganze klappt 17 mal im Einzelschrittmodus, doch sobald der Compiler das 18. mal versucht die Schleife zu durchlaufen springt der Debugger raus (oben in der Titelzeile von VisualStudio steht statt Debug dann Ausführung), die Anwendung hängt allerdings weiterhin.

Sprich das Programm scheint sich einfach ohne Fehlermeldung aufzuhängen.

Hier der (Anonymisierte) Regex:
<.*="xxxxxxx_xxxx xxxxxx">\s.*<.*="xxxx"><.*>(.*)(<.*>){2}(\s*.*){22}<.*="xxxxxxx_xxxxx">(\s*.*){4}\s<.*="xxxxx">(.*)<.*>

Hat jemand von euch das Problem vieleicht auch schon mal gehabt und kann mir nen Lösungsansatz geben? Ist der Regex vieleicht einfach zu lang? Die Zeichenlänge ist die selbe, ich habe lediglich die Suchparameter gegen Xe ausgetauscht, da ich sonst ärger mit meinem Chef bekomme.

Über nen Lösungsansatz würde ich mich echt freuen, vor allem da ich so langsam echt überfragt bin.

Lg Maliko

20.08.2012 - 16:53 Uhr

Ich wollte damit auch nicht sagen, das ihr das sollt. Eigendlich war damit gemeint, das ihr den Inhalt ignorieren könnt.

Naja ich werds dann mal mit LINQ2XML versuchen (wusste bis gerade eben gar nicht das es das gibt. Kannte es nur mit LINQ2OBJECT UND LINQ2SQL).

EDIT: Und sorry für das nichtformatierte XML, die Formatierung ist irgendwie gekillt worden. Scheiß CopyPaste.

20.08.2012 - 16:42 Uhr

Hey,

ich versuche nun seit knapp 3 Stunden eine XML Datei auf verschiedene Art und weise mit XPath auszulesen. Doch es klappt einfach nicht. Ich bekomme immer bei Count 0 zurückgegeben, wenn ich das Ergebnis in eine XmlNodeList laden will.

Da die Datei sehr lang ist, poste ich mal nur nen Ausschnitt:


<?xml version="1.0" encoding="utf-8" ?>
<findItemsIneBayStoresResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
	<ack>Success</ack>
	<version>1.12.0</version>
	<timestamp>2012-08-20T10:42:13.460Z</timestamp>
	<searchResult count="100">
		<item>
			<itemId>320787079273</itemId>
			<title>+ 8 Close-Up Makro Linse 62mm 62 mm</title>
			<globalId>EBAY-DE</globalId>
			<primaryCategory>
				<categoryId>15216</categoryId>
				<categoryName>Filter</categoryName>
			</primaryCategory>
			<galleryURL>
				http://thumbs2.ebaystatic.com/pict/3207870792734040_12.jpg
			</galleryURL>
			<viewItemURL>
				http://www.ebay.com/itm/8-Close-Up-Makro-Linse-62mm-62-mm-/320787079273?pt=DE_Foto_Camcorder_Filter
			</viewItemURL>
			<paymentMethod>CIPInCheckoutEnabled</paymentMethod>
			<paymentMethod>PayPal</paymentMethod>
			<paymentMethod>MoneyXferAccepted</paymentMethod>
			<autoPay>false</autoPay>
			<location>Germany</location>
			<country>DE</country>
			<shippingInfo>
				<shippingType>Free</shippingType>
				<shipToLocations>Worldwide</shipToLocations>
				<expeditedShipping>false</expeditedShipping>
				<oneDayShippingAvailable>false</oneDayShippingAvailable>
				<handlingTime>1</handlingTime>
			</shippingInfo>
			<sellingStatus>
				<currentPrice currencyId="EUR">8.9</currentPrice>
				<convertedCurrentPrice currencyId="USD">10.94</convertedCurrentPrice>
				<sellingState>Active</sellingState>
				<timeLeft>P9DT7H57M20S</timeLeft>
			</sellingStatus>
			<listingInfo>
				<bestOfferEnabled>false</bestOfferEnabled>
				<buyItNowAvailable>false</buyItNowAvailable>
				<startTime>2011-11-03T18:34:33.000Z</startTime>
				<endTime>2012-08-29T18:39:33.000Z</endTime>
				<listingType>StoreInventory</listingType>
				<gift>false</gift>
			</listingInfo>
			<returnsAccepted>true</returnsAccepted>
			<condition>
				<conditionId>1000</conditionId>
				<conditionDisplayName>New</conditionDisplayName>
			</condition>
			<isMultiVariationListing>false</isMultiVariationListing>
		</item>

Ich will an den Inhalt der Item-Childs (davon gibt es knapp 130 in der Datei). Allerdings bekomm ich es einfach nicht hin. Ich habs schon über den Absoluten Weg versucht ("/findItemsIneBayStoresResponse/searchResult/item"), als auch über descendant (descendant::item). Bekomme bei beiden Varianten immer Count = 0 zurück.

Habt ihr vieleicht ne Ahnung was ich da falsch mache? Folgenden Code verwende ich:

private List<Article> ConvertFromXMLToList(List<Article> articles, XmlDocument XMLStream, string competitorName)
        {
            XmlNodeList nodeList = XMLStream.SelectNodes("descendant::searchResult");
            foreach (XmlNode node in nodeList)
            {
                Article article = new Article();

                XmlNodeList name = node.SelectNodes("title");
                foreach (XmlNode nameNode in name)
                {
                    article.ArticleName = nameNode.InnerText;
                }

                try
                {
                    XmlNodeList shippingPrice = node.SelectNodes("/shippingInfo/shippingServiceCost/");
                    foreach (XmlNode shippingPriceNode in shippingPrice)
                    {
                        article.ShippingPrice = double.Parse(shippingPriceNode.InnerText);
                    }
                }
                catch (Exception)
                {

                    article.ShippingPrice = 0.0;
                }
                

                XmlNodeList price = node.SelectNodes("/sellingStatus/currentPrice/");
                foreach (XmlNode nameNode in name)
                {
                    article.Price = double.Parse(nameNode.InnerText);
                }
                
                IQueryable<Stores> selectStoreType = DataHandler.DatabaseObject.Stores.Where(SelectOnly => SelectOnly.name == "Ebay");
                article.StoreType = selectStoreType.First().storeID;
                article.CompetitorName = competitorName;
            }

            return articles;
        }
    }

Bei allem was in der Foreachschleife drin ist hab ich noch nicht testen können obs funktioniert (ich bezweifle es allerdings).

15.08.2012 - 14:46 Uhr

So. Ich habs jetzt tatsächlich hinbekommen. Folgender Codeschnipsel funktioniert:


Stream requestStream;
Stream responseStream;
WebResponse response;
StreamReader sr;
byte[] postData;
string postString;
XmlDocument responseXML = new XmlDocument();
postString = accessDocument.OuterXml + document.OuterXml;
postData = Encoding.UTF8.GetBytes(postString);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wwwcie.ups.com/ups.app/xml/AV");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
requestStream = request.GetRequestStream();

requestStream.Write(postData, 0, postData.Length);
requestStream.Close();

response = request.GetResponse();
responseStream = response.GetResponseStream();
sr = new StreamReader(responseStream);

responseXML.LoadXml(sr.ReadToEnd());

in ResponseXML ist dann der Response drin, den man von UPS zurückgesendet bekommt. accessDocument ist die XML mit den Authentifizierungsdaten für UPS und document ist die XML mit den zu Verifizierenden Daten.

15.08.2012 - 11:44 Uhr

Ist der Datentyp des Datenbankattributes vielleicht int bzw. wie sieht das Datenbankscheema aus?

15.08.2012 - 11:41 Uhr

Hoi,

ich hab da mal ne Frage. Ich hab momentan 2 Objecte vom Typ XmlDocument und würde das andere gerne an das erste ranhängen. Kann mir da irgendjemand sagen, wie ich es machen kann? Weil im Netz finde ich immer nur Beispiele über die Load-Funktion und dafür brauch ich ne Xml-Datei, das lokale Speichern der einzelnen Dokumente wollte ich aber gerne vermeiden. Es geht mir darum, das ich nicht nur die Nodes ins andere XmlDocument-Objekt mergen möchte, sondern auch die Xml-Definition des 2. Objektes.

Ich habs auch schon versucht das erste XmlDocument-Object über ne foreachschleife auszulesen und mit der AppendChild-Methode anzuhängen, klappt aber nicht, da der Node dann zu einem anderem Documentcontext gehört und der Compiler streikt.

Wenn mir da irgendjemand helfen kann indem er mir endweder sagt, das es ohne locale Dateien gar nicht geht oder mit einfach die Funktion nennt (ich hab mir die Klasse bereits in der msdn angeschaut, allerdings keine Entsprechende Funktion finden können), wäre ich demjenigen sehr dankbar.

Vielen Dank schon mal im Vorraus.

Lg Dennis

14.08.2012 - 16:29 Uhr

Davon gehe ich zumindest aus. Wenn ich das richtig gelesen habe, soll man die XML an eine URL senden (diese ist auch von UPS in der Doku angegeben) und erhält dann eine Response-XML zurück. Ich selber habe hier nur 3 xsd-Dateien.

und jup es geht auch via Webservice. UPS bietet z.B. die Pickup und die Shipping, sowie die Trackingdienste auch über eine WSDL an.

14.08.2012 - 16:12 Uhr

Hi,

ich verzweifle hier gerade etwas (bin schon den ganzen Tag am suchen). Und zwar arbeite ich gerade an einer Schnittstelle von unserer Software zu UPS. Hat bisher auch wunderbar geklappt, da das ganze über eine WSDL gesteuert wurde, so das der Webservice direkt angesprochen werden konnte.

Nun habe ich allerdings für die Validierung nur XML-Schematas erhalten und keine WSDL. Ein XMLDocument-Object habe ich bereits mit den entsprechenden XML Daten erstellt, hab jetzt aber keine Ahnung wie ich das Ding jetzt zu UPS bekomme.

Und egal was ich eingebe, ich bekomme immer nur irgendwelche Problemlösungen, die mir was bringen würden, wenn ich den Webservice programmieren würde, ich will ihn aber mit den XML-Daten ansteuern.

Kann mir da irgendjemand vielleicht weiterhelfen? Ihr seid jetzt echt meine letzte Hoffnung. Ich habs hier auch schon über die Suche und die FAQ´s versucht aber auch nix gefunden.

Vielen Dank schon einmal im Vorraus. Und ich hoffe, das die Frage jetzt nicht zu sehr Basic ist.

Lg Dennis

PS: Von UPS hab ich nur ein paar Beispiel-XML Dateien erhalten, nach deren Vorbild ich meine eigene erstellt habe und die URL für den Service.

22.05.2012 - 11:29 Uhr

Oh man. Danke dir. Du hast mir gerade echt den Arsch gerettet. Funktioniert einwandfrei (gleich mal abspeichern, kann man mit Sicherheit noch mal gebrauchen).

22.05.2012 - 11:20 Uhr

Hi,

ich hab mal eine Frage an euch. Und zwar habe ich derzeit ein kleines Schulprojekt in welchem ich mit GDI+ ein Rechteck zeichnen soll, in dessen Mitte sich eine 1 oder 2stellige Zahl befindet.

Das Rechteck habe ich bereits fertig, allerdings habe ich nun überhaupt keine Ahnung, wie ich die Zahl da rein bekomme. Kann mir da vieleicht irgendjemand nen Tipp geben? Bei Google hab ich nix gefunden (kann natürlich auch sein, das ich mit den falschen Suchparametern gesucht habe).

Über eine rasche Antwort wäre ich euch unendlich Dankbar.

Danke schon im Vorraus.

Liebe Grüße
Maliko

10.05.2012 - 18:01 Uhr

ich finds einfach nicht. Dazu kommt auch, das ich die Zip-Klasse nicht selbst geschrieben habe, sondern mein Klassenlehrer meinte, wir sollen uns die runterladen, da sie gut ist.

Daher verstehe ich auch nicht alles 100%ig.

10.05.2012 - 12:50 Uhr

Hi,

ich schreibe derzeit eine kleine Webseite, welche aus hochgeladenen Bildern ein Windowstheme erstellt (ist ne Schulaufgabe). Allerdings habe ich ein kleines Problem. Und zwar benutze ich die SharpLibZip.dll zum Zippen in Verbindung mit einer eigenen Klasse. Das Zippen funktioniert auch einwandfrei, jedoch kommt es beim Bennenen des Ordners im ZipFile zu problemen, da er nur den letzten Buchstaben als Ordnername nimmt und nicht den gesamten.

Hier einmal die Funktion zum Zippen:

public void CompressDirectory(List<string> InputFiles, string FileName, string OutputDir)
        {
            string RelativePath = null;

            if (Directory.Exists(OutputDir) == false) Directory.CreateDirectory(OutputDir);

            FileStream ZFS = new FileStream(OutputDir + "\\" + FileName, FileMode.Create);
            ICSharpCode.SharpZipLib.Zip.ZipOutputStream ZOut = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(ZFS);

            ZOut.SetLevel(6);

            ICSharpCode.SharpZipLib.Zip.ZipEntry ZipEntry = default(ICSharpCode.SharpZipLib.Zip.ZipEntry);

            byte[] Buffer = new byte[4097];
            int ByteLen = 0;
            FileStream FS = null;

            int ParentDirLen = Path.GetDirectoryName(InputFiles[0]).Length;
            for (int i = 0; i <= InputFiles.Count - 1; i++)
            {
                //Relativen Pfad für die Zip Datei erstellen
                RelativePath = InputFiles[i].Substring(ParentDirLen);

                //ZipEntry erstellen
                ZipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(RelativePath);
                ZipEntry.DateTime = System.DateTime.Now;

                //Eintrag hinzufügen
                ZOut.PutNextEntry(ZipEntry);

                //Datei in den Stream schreiben
                FS = new FileStream(InputFiles[i], FileMode.Open, FileAccess.Read, FileShare.Read);
                do
                {
                    ByteLen = FS.Read(Buffer, 0, Buffer.Length);
                    ZOut.Write(Buffer, 0, ByteLen);
                }
                while (!(ByteLen <= 0));
                FS.Close();
            }

            ZOut.Finish();
            ZOut.Close();
            ZFS.Close();
        }

Diese Funktion rufe ich auf folgende Weise auf:

ZipLib zip = new ZipLib();
            zip.Self = false;
            zip.CompressDirectory(FilesToZip, Title + ".themepack", rootPath + "\\download\\");
            zip.DeleteFiles(Path + FolderName + "\\");

Ich selber vermute, das es an folgender Codezeile liegt:

int ParentDirLen = Path.GetDirectoryName(InputFiles[0]).Length;
            for (int i = 0; i <= InputFiles.Count - 1; i++)
            {
                //Relativen Pfad für die Zip Datei erstellen
                RelativePath = InputFiles[i].Substring(ParentDirLen);

Der String InputFiles[0] hat dabei folgenden Inhalt (Beispiel):

Z:\C#\Projects\WebThemeCreator\WebThemeCreator\images\self\6a571a61-6083-41c9-aef8-1495bed7755b\DesktopBackground\Jellyfish.jpg

Der Int ParentDirLen bekommt dadurch den Wert 113. Da nach der For-Schleife mit einem Substring gearbeitet wird, und dort der Int ParentDirLen verwendet wird beginnt er erst bei dem letzten Buchstaben des Ordners (dem d von DesktopBackground).

Nun meine Frage. Ich finde den Fehler einfach nicht und habe keine Ahnung was da derzeit falsch läuft. Hätte da von euch vieleicht jemand eine Ahnung?

Danke schon mal im Vorraus.

Lg Maliko

25.02.2012 - 16:29 Uhr

Ich speicher ganz bestimmt nicht das Passwort in der Reinform in der Datenbank. Das wird natürlich nur als Hash in der DB gespeichert. Und im Cookie, deshalb hab ich ja solche Bauchschmerzen dabei gehabt. Danke dir. Ich werd mir die Links mal genauer anschauen.

25.02.2012 - 15:37 Uhr

Hoi,

ich hab mal ne Frage an euch. Ich arbeite gerade an einem neuen Projekt, und möchte einen Cookiebasierten Autologin machen. Was ich mich jetzt nur frage ist, was ist besser. Speicher ich Username und Passwort im Cookie und mach jedes mal wenn keine LoginSession existiert ne Abfrage ob die auch Existieren (finde ich allerdings recht problematisch, da so die Zugangsdaten in Klarschrift auf dem Rechner des User liegen würden) oder soll ich es einfach nur schauen ob das Cookie existiert und nicht abgelaufen ist und dann einfach direkt einloggen indem einfach nur der Benutzername im Cookie gespeichert wird (was ich auch problematisch finde, da so nur das Cookie gefaked werden müsste um eingeloggt zu werden).

Ihr seht, ich sehe beide Methoden kritisch. Nur eine andere fällt mir ehrlich gesagt nicht ein, weshalb ich momentan zur ersten Methode tendiere. Oder habt ihr das besser gelöst?

Würde gerne mal eure Meinung dazu hören.

Grüße
Maliko

19.02.2012 - 16:17 Uhr

Ich bekomme gerade die Kriese. Das Problem hat sich von selbst gelöst. Wenn man die Debugfunktion nutzt dann kommt man da auch von selbst drauf, das die Sessionvariable beim ersten Aufruf (da wo mir der Fehler um die Ohren gehauen wurde) noch gar nicht existiert. Die if Abfrage muss einfach nur von if (IsPostBack != false) in if (Session["Notes"] != null) geändert werden und schon funktioniert das ganze auch. Man sollte vielleicht nicht unbedingt direkt nach dem Aufstehen an Programmieren machen, sonst kommen da solche Sachen bei raus.

19.02.2012 - 11:13 Uhr

Hi,

ich habe an euch mal eine Frage. Ich habe übers Wochenende die Hausaufgabe bekommen, das ich eine Webapplikation erstellen soll, welche einen Sessionstate nutzt. Das Problem ist allerdings das ich es nicht hinbekomme.

Hier der C# Code meiner default.aspx:

public partial class _default : System.Web.UI.Page
    {
        String noten;

        protected void Page_Load(object sender, EventArgs e)
        {
            tbox_einzelwert.Focus();
            if (IsPostBack != false)
            {
                noten = Session["Notes"].ToString();
            }
        }

        protected void btn_dazu_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(noten);
            sb.Append(tbox_einzelwert.Text + ";");
            noten = sb.ToString();
            Session["Notes"] = noten;
            Label1.Text = Session["Notes"].ToString();
        }

        protected void btn_auswerten_Click(object sender, EventArgs e)
        {
            Response.Redirect("ergebnis.aspx");
        }
    }

Bei noten = Session["Notes"].ToString(); haut er mir aber immer die Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." um die Ohren. Kann mir vielleicht jemand sagen was ich falsch mache? Weil bei der ergebnis.aspx funktioniert es so.

Hier zur Vollständigkeit noch der C# Code der Ergebnis.aspx:

public partial class ergebnis : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            String noten = Session["Notes"].ToString();
            String[] einzeln = noten.Split(';');
            Int32 gesamt = 0;
            Int32 mittel = 0;
            Int32 min = 0;
            Int32 max = 0;
            Int32 forCounter = 0;

            for (Int32 i = 0; i < einzeln.Length - 1; i++)
            {
                gesamt += Int32.Parse(einzeln[i]);

                if (forCounter == 0)
                {
                    min = Int32.Parse(einzeln[i]);
                    max = Int32.Parse(einzeln[i]);
                }

                if (min > Int32.Parse(einzeln[i]) && forCounter != 0)
                {
                    min = Int32.Parse(einzeln[i]);
                }

                if (max < Int32.Parse(einzeln[i]))
                {
                    max = Int32.Parse(einzeln[i]);
                }
                forCounter++;
            }

            mittel = gesamt / forCounter;

            MittelwertWert.Text = mittel.ToString();
            MittelwertNote.Text = AusgabeNote(mittel);
            MinNoteWert.Text = min.ToString();
            MinNoteText.Text = AusgabeNote(min);
            MaxNoteWert.Text = max.ToString();
            MaxNoteText.Text = AusgabeNote(max);
            p_auswertung.Visible = true;
        }

        private String AusgabeNote(int prozent)
        {
            if (prozent < 29)
            {
                return "ungenügend";
            }
            else if (prozent < 50 && prozent >= 29)
            {
                return "mangelhaft";
            }
            else if (prozent < 67 && prozent >= 50)
            {
                return "ausreichend";
            }
            else if (prozent < 81 && prozent >= 67)
            {
                return "befriedigend";
            }
            else if (prozent < 92 && prozent >= 81)
            {
                return "gut";
            }
            else if (prozent >= 92)
            {
                return "sehr gut";
            }

            return null;
        }
    }

Ich wäre euch sehr dankbar, wenn mir da jemand weiterhelfen könnte.

Lg Maliko