Falscher Feldtyp bei XML-Quelle

Hi,

meine Datenquelle ist eine XML-Datei. Ein Attribut beinhaltet entweder eine Zahl oder den String “NaN”.

Wenn ich das entsprechende Feld in meine Tabelle aufnehme, wird statt “NaN” immer eine 0 ausgegeben. Der von List & Labels ermittelte Feldtyp ist fälschlicherweise Number (statt String). Offensichtlich schaut sich der Parser nicht alle Werte an, um den Feldtyp zu bestimmen (vielleicht sogar nur den ersten).

Weiß jemand, wie ich verhindern kann, dass “NaN” zu “0” wird?

Danke,
Christian

Hallo Christian,

vielen Dank für Ihren Beitrag.

Entweder Sie setzen hier die Eigenschaften „FlattenStructure“ und „ParseFirstElementOnly“ des Providers jeweils auf „false“, oder Sie verwenden das spezielle lltype-Attribut in der XML Quelle. Beispiel:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> combit GmbH Wild John 1 Cash William Cash 0

Mit freundlichen Grüßen

Thomas Metternich
Technischer Support
combit GmbH

Hallo,

das hier hat keine Veränderung hervorgerufen:

var provider = new XmlDataProvider(xml);
provider.FlattenStructure = false;
provider.ParseFirstElementOnly = false;

Das Feld wird immer noch als Zahl erkannt.

Und die Variante mit lltype kann ich leider nicht ausprobieren, da es sich in meinem Fall um ein XML-Attribut und nicht um einen Knoten handelt.

Mit freundlichen Grüßen,
Christian Lambert

Hallo Christian,

vielen Dank für Ihren Beitrag.

Können Sie hier einmal einen entsprechenden XML-Inhalt posten?

Mit freundlichen Grüßen

Thomas Metternich
Technischer Support
combit GmbH

Ich habe einen einfachen Testfall erzeugt, mit dem man es nachstellen kann (Anhang)

Nachtrag: da ich kein XML anhängen kann hier zum Kopieren:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

xml.jpg

Hallo Christian,

vielen Dank für Ihren Beitrag.

NaN ist ein gültiger Double-Wert, daher wird die Spalte als Zahl erkannt. List & Label kennt das Konzept von NaN allerdings nicht, daher wird die Zahl zu 0 konvertiert wie es die meisten Parser machen, die NaN nicht kennen. Eine Alternative wäre NULL zu verwenden, auch das gibt es, wir haben uns vor Jahren aber für “0” entschieden.

Sie können aber den AutoDefineField oder den PreParseXPathNavigator-Event des Providers verwenden, um den Typ zu ändern:

void LL_AutoDefineField(object sender, AutoDefineElementEventArgs e)
{
if (e.Name.Contains(".x"))
{
e.FieldType = LlFieldType.Text;
}
}

Mit freundlichen Grüßen

Thomas Metternich
Technischer Support
combit GmbH