AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

delphi<->XML

Ein Thema von salem01 · begonnen am 5. Nov 2005 · letzter Beitrag vom 6. Nov 2005
Antwort Antwort
salem01

Registriert seit: 8. Okt 2005
19 Beiträge
 
#1

delphi<->XML

  Alt 5. Nov 2005, 19:06
hallo zusammen,

ich habe folgendes problem:
ich will eingabe-Felder als Pflichtfelder definieren und versuche unter delphi zu überprüfen ob in diesen feldern wirklich was steht oder nicht.
Die XML sieht folgendermassen aus:
Delphi-Quellcode:
          .....
   <attribut typ="nc">
      <beschreibung>Telefon privat</beschreibung>
   </attribut>
   <attribut typ="nc">
      <beschreibung>Telefon geschäftlich</beschreibung>
   </attribut>
   <attribut typ="nc">
      <beschreibung>Mobile</beschreibung>
   </attribut>
          .....

nun will ich überprüfen, ob Telefon privat leer steht, der delphi-code sieht so aus:
Delphi-Quellcode:
with RequestInfo.Params do
       begin
        .......
        stammdaten.ort:= Values['ort'];
        stammdaten.telefonPrivat:= Values['telefon privat'];//HIER LIEGT DAS PROBLEM
        stammdaten.telefonGeschaeft:= Values['telefon geschäftlich'];//HIER LIEGT DAS PROBLEM
        stammdaten.mobile:= Values['mobile'];
        ......
        ......
if ........
      OR (stammdaten.ort = '') OR (stammdaten.telefonPrivat = '') OR
         (stammdaten.telefonGeschaeft = '') OR (stammdaten.geburtsdatum = '') OR
         (stammdaten.mobile = '') then
das leerzeicht bzw. das 'ä' ist das problem, habe es zu lösen vom leerzeicht mit '*' und '' versucht , aber leicer erfolglos .

hat jemand vielleicht einen tipp oder empfehlung? .

LG.
SALEM
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: delphi<->XML

  Alt 5. Nov 2005, 19:42
Hallo Salem.

Wenn du schreibst mit welchen Komponenten du in deinem Code arbeitest, dann ist es leichter dir zu helfen. Mit dem gezeigten Code wirst du auch nicht auf das gezeigte XML-Fragment zugreifen - oder?

Grüße vom marabu
  Mit Zitat antworten Zitat
salem01

Registriert seit: 8. Okt 2005
19 Beiträge
 
#3

Re: delphi<->XML

  Alt 5. Nov 2005, 20:09
HI marabu;

hast recht, also es ist mit Delphi6 , MSXML4 geschrieben.
es läuft eigentlich sonst ok soweit, der delphi-coder stattmte aus der server-unit, die kann die daten lesen und weitervermitteln .
Ich versuche dabei einen neuen Probanden anzulegen, wobei eine attribute.xml datei mitbezogen wird, aus der die vorhandenen attribute für den anzulegenden proband zugewiesen und ausgefüllt werden.
nach dem anlegen eines probanden sieht ein pronaden-tag so aus:
Delphi-Quellcode:
<proband>
      <id>1</id>
      .....
      <attribut typ="nc">
         <beschreibung>Ort</beschreibung>
         <def_wert>Irgendwo</def_wert>
      </attribut>
      <attribut typ="nc">
         <beschreibung>Telefon privat</beschreibung>
         <def_wert>23562345</def_wert>
      </attribut>
      <attribut typ="nc">
         <beschreibung>Telefon geschäftlich</beschreibung>
         <def_wert>089585</def_wert>
      </attribut>
      <attribut typ="nc">
         <beschreibung>Mobile</beschreibung>
         <def_wert>07856780567856</def_wert>
      </attribut>
      .....
</proband>
hoffe das reicht dir es einigermassen zu beschreiben
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: delphi<->XML

  Alt 5. Nov 2005, 20:21
Wenn Params ein Nachfahre von TStrings ist, dann kann ich dir versichern, dass du Zeichenketten als Names verwenden kannst, die Leerstellen oder Sonderzeichen enthalten. Was genau ist dein Problem?

marabu
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: delphi<->XML

  Alt 5. Nov 2005, 20:32
wie wärs den mit simploxml?

anbei


Gruss

EL
Angehängte Dateien
Dateityp: rar simploxml_856.rar (8,7 KB, 28x aufgerufen)


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
salem01

Registriert seit: 8. Okt 2005
19 Beiträge
 
#6

Re: delphi<->XML

  Alt 5. Nov 2005, 21:10
jetzt geht's, weiss aber dummerweise nicht genau woran es lag! das nennt man performance SW

danke euch.
LG
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: delphi<->XML

  Alt 6. Nov 2005, 00:08
Wenn du XML Daten validieren will, halte ich selbstgeschriebenen Code für wenig sinnvoll. Dafür wurden doch XML Schema erfunden. (Suche einfach "XSD" bei W3C oder Google)

Damit lassen sich deine Daten beschreiben und du kannst sie so gegen das Schema prüfen lassen.
Ein Schema für die von dir "preisgegebene" Struktur könnte so aussehen:
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://Salem.net/SalemSchema.xsd"
           elementFormDefault="qualified"
           xmlns="http://Salem.net/SalemSchema.xsd"
           xmlns:mstns="http://Salem.net/SalemSchema.xsd"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="probanten">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="probant">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded"
                          name="attribut">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="beschreibung"
                                type="BeschreibungsTyp"
                                minOccurs="1"
                                maxOccurs="1" />

                    <xs:element name="def_wert"
                                type="DefWertTyp"
                                minOccurs="1"
                                maxOccurs="1" />
                  </xs:sequence>

                  <xs:attribute name="typ"
                                type="AttributTyp"
                                use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>

            <xs:attribute name="Id"
                          type="xs:integer"
                          use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  
  <xs:simpleType name="AttributTyp">
    <xs:restriction base="xs:string">
      <xs:enumeration value="nc" />
      <xs:enumeration value="andererTyp" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="DefWertTyp">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="BeschreibungsTyp">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Ort" />
      <xs:enumeration value="Telefon privat" />
      <xs:enumeration value="Telefon geschäftlich" />
      <xs:enumeration value="Mobil" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
Jeder Probant muss eine Id haben und jedes Attribut muss den richtigen Text in Typ sowie in beschreibung stehen haben. Außerdem muss ein Wert in def_wert stehen.

Wenn du deine Daten anders strukturierst, könnte man mehr Prüfungen durchführen (bei den bestehenden ist es etwas krampfartig, def_wert für Ort oder ein Telefon zu prüfen... )

Wenn so deine Daten aussähen...
XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<Probanten xmlns="http://Salem.net/SalemSchema2.xsd">
  <Probant Id="1">
    <Ort>Mööphausen</Ort>
    <TelefonEinträge>
      
      <Eintrag Typ="Privat"
               Nummer="023-40044"/>
      
      <Eintrag Typ="Geschäftlich"
               Nummer="0123-28j9"/>
    </TelefonEinträge>
  </Probant>
  <Probant Id="2">
    <Ort>Mööphausen</Ort>
    <TelefonEinträge>
      
      <Eintrag Typ="Privat"
               Nummer="1233 40244"/>
      
      <Eintrag Typ="Mobil"
               Nummer="930-40044"/>
      
      <Eintrag Typ="Hallo"
               Nummer="031-42044"/>
    </TelefonEinträge>
  </Probant>
</Probanten>
könnte man plötzlich alles mögliche prüfen lassen. (Telefonnummern inklusive Vorwahl, Eindeutigkeiten,...)

Zum Beispiel mit dem Schema (Ich hoffe die Kommentare reichen):
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://Salem.net/SalemSchema2.xsd"
           elementFormDefault="qualified"
           xmlns="http://Salem.net/SalemSchema2.xsd"
           xmlns:mstns="http://Salem.net/SalemSchema2.xsd"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

  
  <xs:element name="Probanten"
              type="ProbantenListe">

    
    <xs:unique name="EinmaligerProbant">
      <xs:selector xpath="./Probant" />
      <xs:field xpath="@Id" />
    </xs:unique>
  </xs:element>

  
  <xs:complexType name="ProbantenListe">
    <xs:sequence>
      <xs:element name="Probant"
                  type="ProbantenEintrag"
                  minOccurs="1"
                  maxOccurs="unbounded">
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ProbantenEintrag">
    <xs:sequence>
      <xs:element maxOccurs="unbounded"
                  name="Ort"
                  type="xs:string">
      </xs:element>
      <xs:element name="TelefonEinträge"
                  type="TelefonEintragListe">

        
        <xs:unique name="EinmaligerTelefonTyp">
          <xs:selector xpath="./Eintrag" />
          <xs:field xpath="@Typ" />
        </xs:unique>

        <xs:unique name="EinmaligeTelefonNummer">
          <xs:selector xpath="./Eintrag" />
          <xs:field xpath="@Nummer" />
        </xs:unique>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Id"
                  type="xs:integer"
                  use="required" />
  </xs:complexType>

  <xs:complexType name="TelefonEintragListe">
    <xs:sequence>
      <xs:element name="Eintrag"
                  type="TelefonEintrag"
                  minOccurs="1"
                  maxOccurs="unbounded">
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="TelefonEintrag">
    <xs:attribute name="Typ"
                  type="TelefonTyp"
                  use="required" />
    <xs:attribute name="Nummer"
                  type="TelefonNummer"
                  use="required" />
  </xs:complexType>

  <xs:simpleType name="TelefonTyp">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Privat" />
      <xs:enumeration value="Geschäftlich" />
      <xs:enumeration value="Mobil" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TelefonNummer">
    <xs:restriction base="xs:string">
      <!--beginned mit 0, 2 bis 5 Stellen restliche Vorwahl;
          3 bis 10 Stellen Hauptnummer; getrennt durch ein "-" -->

      <xs:pattern value="0\d{2,5}[/-]\d{3,10}" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
Wie gesagt, XSD lässt sehr aufwenide Prüfungen zu, ohne dass du wirklich aufwendig viel schreiben musst. Dass da oben habe ich einfach zusammengeklickt. (siehe Anhang)

Wie du es in Delphi32 mit MS XML verwendest kann ich dir nicht sagen (befasse mich erst seit .Net intensiver mit XML), aber der Simmatze wird hier ganz sicher vorbeistolpern.

btw: Ich hoffe es ist nicht zuuu offensichtlich, dass ich gerne XSDs zusammenfriemel.
Miniaturansicht angehängter Grafiken
salemschemadesign_798.png  
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: delphi<->XML

  Alt 6. Nov 2005, 01:23
stammdaten.telefonPrivat:= trim(Values['telefon privat']); Vielleicht so ?
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
salem01

Registriert seit: 8. Okt 2005
19 Beiträge
 
#9

Re: delphi<->XML

  Alt 6. Nov 2005, 20:57
danke jungs,

es läuft jetzt wie vorgestellt .

Robert_G, danke für deine tipps, befasse mich aber seit kurzem mit xml, dabei muss man viele neue sachen wissen, z.B. wie XSD .

LG.
SALEM
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz