wie xml dokument aufbauen

Y

yfons123

Gast
ich hab mal als beispiel dieses xml dokument
XML:
<?xml version="1.0"?>
<catalog>
   <book width="2">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <description>An in-depth look at creating applications
      with XML.</description>
   </book>
   <book width="4">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <description>A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.</description>
   </book>
</catalog>

wann soll ich ein attribut angeben? zb hier width wann und weshalb soll ich das so angeben und nicht als unter node
wo sich dann wieder die frage stellt
wann soll ich einen unter node einfügen ? wann tut man das ?

was sind dafür die regeln die man einhalten soll ... da das xml dokument für "mods" benutzt werden sollte und keinen anderen sinn hat sollte es lesbar sein also frag ich gleich mal bevor ich daneben lange
 

LimDul

Top Contributor
Kurzfassung: Regeln gibt es nicht. Alles was ein Attribut ist ist, kann man in der Regel auch als Node modellieren. Man sollte das nehmen, was möglichst sinnvoll aussieht.

Insbesondere, wenn einen Knoten hat, der Text enthalten soll, kann es oft sinnvoll die restlichen Zusatzinformationen - sofern es nicht zu viele sind - als Attribute unterzubringen. Würde man sie als eigene Knoten machen, bräuchte man für den Text einen weiteren Sub-Knoten, z.B. Value

Andererseits wird viel Text in Attributen schnell unleserlich.
 

LimDul

Top Contributor
Hauptsache man macht es nicht wie die SAP die - wenn ich mich recht erinnere - bei WebDynpro den Java-Code in Attribute eines XML-Tags gepackt hat.
 

Robert Zenz

Top Contributor
Oh, wir machen Anekdoten zu XML? Ich habe mal die XML Schnittstelle fuer einen groszen, Oesterreichischen Paketzusteller gesehen, also die Schnittstelle wo man Sendungen angeben kann und dann ein Etikett dafuer zurueck bekommt...das war in etwa so:

XML:
<sendungen>
	<sendung>
		<attribute>
			<attribut>
				<name>typ</name>
				<wert>Paket</wert>
			</attribut>
			<attribut>
				<name>gewicht</name>
				<wert>2,5</wert>
			</attribut>
			...
		</attribute>
	</sendung>
</sendunge>

Hab' ich bis heute Albtraeume davon.



Um zu deiner Frage zurueckzukehren, @LimDul hat es schon richtig gesagt. Es gelten die gleichen Regeln wie beim Modellieren von Klassen, oder von APIs, mach' das was Sinn macht, was leicht zu lesen ist und vorallem versuche konsisten zu sein und keine Ueberraschungen einzubauen.

Wenn es leicht Human-lesbar sein soll, dann sind Sub-Knoten meistens besser als Attribute, insbesondere dann wenn es viele davon gibt. In deinem Fall wuerde ich also die Weite (physische Weite des Buches?) ebenfalls als Sub-Knoten machen, vielleicht in so etwas wie Dimension/Abmessungen kapseln.
 
Y

yfons123

Gast
ich versuchs irgendwie logisch aufzubauen

da diese xml dateien auch von nicht programmieren verstanden werden sollen (jaaaa ich bin noch optimistisch ) werd ich auf das gesagte aufpassen
das mit den books war nur ein beispiel weil meine aktuelle datei noch recht mager ausschaut
Java:
<country name="Britain">
    
</country>
 
Y

yfons123

Gast
XML:
<!DOCTYPE doc [
    <!-- Buildingtypes -->
    <!ENTITY military "Military Factory">
    <!ENTITY civilian "Civilian Factory">
    <!ENTITY city "City">
    <!-- Ressources -->
    <!ENTITY fuel "Fuel">
    <!ENTITY steel "Steel">
    
]>
<territories>
    <territory name="Berlin">
        <buildings>
            <building type=&military; amount="3"/>
            <building type=&civilian; amount="5"/>
        </buildings>
        <ressources>
            <ressource type=&fuel; amount="10"/>
            <ressource type=&oil; amount ="99"/>
        </ressources>
    </territory>
    <territory name="Bayern">
        <buildings>
            <building type=&military; amount="4"/>
            <building type=&civilian; amount="2"/>
        </buildings>
        <ressources>
            <ressource type=&fuel; amount="10"/>
        </ressources>
    </territory>
</territories>
ich hätte es prinzipiell mal so aufgebaut gibt es da schon vorschläge? das war jetzt einfach mal frei schnauze
 

KonradN

Super-Moderator
Mitarbeiter
Wieso gibst Du denn den DTD Block am Kopf überhaupt an? Hast Du diesbezüglich eine Anforderung?

Je nach Anforderungen wäre ggf. eine xsd besser, die den Aufbau richtig beschreibt?
 

Robert Zenz

Top Contributor
Also um noch etwas auszuholen, es wirkt so als wuerdest du versuchen einen Enum nachzuahmen, aber das bringt dir nichts, denn es gibt hier keinen Compiler-Schritt. Also in Java ist ein Enum Sinnvoll weil der Compiler bei seinem Schritt die Fehler faengt.

Java:
public enum Type {
    CIVILIAN,
    FUEL, // WTF?
    MILITARY;
}

someObject.setType("CIVVILIAN"); // Runtime error
someObject.setType(Enum.CIVVILIAN); // Compiler error

Aber diesen Schritt gibt es bei XMLs nicht.

XML:
<object type="CIVVILIAN"/> <!-- Runtime error -->
<object type=&civvilian/> <!-- Runtime error -->

Also du gewinnst nichst auszer Komplexitaet, also das schreiben deiner XML wird dadurch nur schwieriger.

Da waere es besser wenn du dir ein XSD schreibst gegen welches du die XML Datei dann validierst.

XML:
<element name="object">
	<complexType>
		<attribute name="type">
			<simpleType>
				<restriction base="string">
					<enumeration value="CIVILIAN"/>
					<enumeration value="FUEL"/> <!-- WTF? -->
					<enumeration value="MILITARY"/>
				</restriction>
			</simpleType>
		</attribute>
	</complexType>
</element>

Dann tippt sich das XML ganz einfach (einfach nur "normale" Attribute und Werte), und du kannst dennoch die Wohlgeformtheit bestimmen.

Zusaetzlich sind XML Entities ein Konstrukt welches man mit Vorsicht einsetzen und erlauben sollte (idealerweise direkt im Parser entweder gar nicht implementiert oder deaktiviert).
 
Y

yfons123

Gast
ich habe keinerlei anforderungen ich kann das aufbauen wie ich gerade lustig bin


es muss lesbar sein und einfach zu verstehen der rest ist optional
ich weis nicht mal was xsd ist
 

Robert Zenz

Top Contributor
Die XML Schema Definition erlaubt es dir ein Schema festzulegen welchem das XML Dokument entsprechen muss. Die meisten Parser und auch Editoren koennen XSD, und bieten daher Unterstuetzung dafuer an. Betrachte es als Typ-Definitionen, beziehungsweise wie dein XML geformt sein muss.

Der Vorteil ist dass jeder im XSD nachschauen kann wie das XML aufgebaut sein muss, also auch Programme.
 
Y

yfons123

Gast
Also um noch etwas auszuholen, es wirkt so als wuerdest du versuchen einen Enum nachzuahmen, aber das bringt dir nichts, denn es gibt hier keinen Compiler-Schritt. Also in Java ist ein Enum Sinnvoll weil der Compiler bei seinem Schritt die Fehler faengt.

Java:
public enum Type {
    CIVILIAN,
    FUEL, // WTF?
    MILITARY;
}

someObject.setType("CIVVILIAN"); // Runtime error
someObject.setType(Enum.CIVVILIAN); // Compiler error

Aber diesen Schritt gibt es bei XMLs nicht.

XML:
<object type="CIVVILIAN"/> <!-- Runtime error -->
<object type=&civvilian/> <!-- Runtime error -->

Also du gewinnst nichst auszer Komplexitaet, also das schreiben deiner XML wird dadurch nur schwieriger.

Da waere es besser wenn du dir ein XSD schreibst gegen welches du die XML Datei dann validierst.

XML:
<element name="object">
    <complexType>
        <attribute name="type">
            <simpleType>
                <restriction base="string">
                    <enumeration value="CIVILIAN"/>
                    <enumeration value="FUEL"/> <!-- WTF? -->
                    <enumeration value="MILITARY"/>
                </restriction>
            </simpleType>
        </attribute>
    </complexType>
</element>

Dann tippt sich das XML ganz einfach (einfach nur "normale" Attribute und Werte), und du kannst dennoch die Wohlgeformtheit bestimmen.

Zusaetzlich sind XML Entities ein Konstrukt welches man mit Vorsicht einsetzen und erlauben sollte (idealerweise direkt im Parser entweder gar nicht implementiert oder deaktiviert).
ich werd mir das mit xsd anschauen

es sollten eig 2 enums sein 1 mal für ressrouce und 1 mal für gebäude :D

das xxe sollte in c# mit dem was ich nicht vorkommen weil ich auf parse eingestellt habe und eine max character länge pro parse ( ?? ) gesetzt hab was ich auf stack overflow gelesen hab,
da diese xml dateien unter spieler ausgetauscht werden aber die dtd für alle gleich sein MUSS könnte ich vllt diese einfügen wie injection ? keine ahnung in der hinsicht wie man das machen soll
 
Y

yfons123

Gast
ich will ansich dass mein spiel nur der parser ist

es gibt eine fixe karte wo bei deren territorien einteilung nicht festgelegt ist dh diese sollte auf basis der xml dateien passieren
somit man unterschiedliche map einteilungen hat wie zb ww1 und ww2 ohne dass ich das spiel anfassen muss, mein spiel soll die xml dateien lesen und interpretieren

wo halt ein allgemeines problem ist diese "mods" sollten einfügbar sein , dh unter spielern austauschbar sein , zb jemand lädt einen ordner runter mit einer speziellen einstellung in den xml dateien somit der die gleiche map einteilung hat

und wie man weis keine sau überprüft ob die xml dateien vertrauenswürdig sind und keine sau überprüft die händisch
 

KonradN

Super-Moderator
Mitarbeiter
Für einfaches serialisieren / deserialisieren brauchst Du kein xsd. Lass dann einfach diesen DTD schrott weg und gut ist es.

Das xsd kann das alles verkomplizieren, denn das serialisierte XML sollte dann natürlich auch die entsprechenden namespaces nutzen. Das muss man dann natürlich auch alles entsprechend angeben und dann muss aber auch alles richtig stimmen. Das kann gerade am Anfang, wenn man noch keine Ahnung davon hat, recht viel auf einmal ein und eine Fehlersuche stark verkomplizieren.
 

Robert Zenz

Top Contributor
das xxe sollte in c# mit dem was ich nicht vorkommen weil ich auf parse eingestellt habe und eine max character länge pro parse ( ?? ) gesetzt hab was ich auf stack overflow gelesen hab

Also erstens, C#?! VERRAETER! Zweitens, Entities komplett abgeschaltet zu haben ist auf jeden Fall besser als alles andere, aber ich nix Sicherheitsmensch.

da diese xml dateien unter spieler ausgetauscht werden aber die dtd für alle gleich sein MUSS könnte ich vllt diese einfügen wie injection ?

Verdammt ja! Das bedeutet ein Spieler bekommt von einem komplett fremden eine solche Datei, damit ist jede Form von Angriff denkbar, da musst du dann ziemlich aufpassen. Um so weniger dein XML Parser dann kann und macht, umso besser. Am besten direkt Dateien groeszer als X megabyte ablehnen ohne die in den Parser zu schieben, alles im Parser abschalten auszer stumpfes XML. Musst du ziemlich aufpassen.

wo halt ein allgemeines problem ist diese "mods" sollten einfügbar sein , dh unter spielern austauschbar sein , zb jemand lädt einen ordner runter mit einer speziellen einstellung in den xml dateien somit der die gleiche map einteilung hat

Das wird mit einem festen Schema etwas schwierig. Die bestehende Struktur kann dann nicht erweitert werden, nur bestimmte "any" Knoten. Also eher nicht in dem Fall.

XML scheint mir hier jetzt aber auch etwas lastig zu sein fuer das serialisieren von Spielstaenden, aber kann man natuerlich machen, keine Thema.
 
Y

yfons123

Gast
Lass dann einfach diesen DTD schrott weg und gut ist es.
da ich halt mehrere gebiete abdecken msus wie zb gebäude einteilung + events + nationen , solllte ich dann einfach lieber mehrere xml dateien machen udn diese einzeln laden?
XML scheint mir hier jetzt aber auch etwas lastig zu sein fuer das serialisieren von Spielstaenden, aber kann man natuerlich machen, keine Thema.
es sind ansich keien spielstände, sondern da steht drin wei die map ganz am anfang aufgebaut wird, nachdem die karte , nationen und events aufgebaut sind sind die xml dateien "nutzlos" also ansich die werden hergenommen für "neues spiel starten"
Also erstens, C#?! VERRAETER!
hehe.. ich mach schon noch an meiner javafx bibliothek weiter die werd ich nciht einfach so verlassen :D
Die bestehende Struktur kann dann nicht erweitert werden
die wird auch nicht erweitert während dem spiel, diese ist nur um den anfang zu erstellen, ab dann hab ich da unity spezifische speicher möglichkeiten von denen ich keinen pfenning ahnung hab

EDIT: noch angemerkt ich hab ka 100 solcher territorien .. wenn ich die jetzt alle in eine datei rein backe macht das was ? oder sollte man größere xmls umgehen?
 
Y

yfons123

Gast
ich habe eine hexagon map die ist ansich rechteckig mit 100 x 100 hexagonen diese sind erstmal alle ohne material ( also keine farbe )
diese karte hat jeder spieler selber im dateisystem also die ist sicher und immer gleich
diese sind in päckchen eingeteilt also territorien

Unbenannt.PNG
zb hab ich diese map als "end ergebnis"
deutschland besteht zb aus 18 territorien
zb steht in der xml drinnen "bayern hat 5 gebäude und gehört zu deutschland" dann nachdem ich die xml geladen hab färbt das spiel das territorium für bayern schwarz ein und gehört somit zu deutschland, das latsch ich für alle bundesländer durch + königsberg udn dann wäre detschland eingeteilt
bayern hätte zb 7 hexagone die zu dem territorium gehören, dieses territorium ist aber schon fest eingestellt

was der sinn von dem xml ist, dass ich zb ww1 als map einteilung machen kann dass zb ungarn kein territorium hat und österreich hat die territorien von ungarn zusätzlich

die spieler sollten ihre eigenen karten einteilungen fest legen können, zb machen die eine einteilung wie bei den römern oder sonst was
somit sollte mein spiel ansich nur die xml dateien übersetzen und auf die karte "malen"

zusätzlich sollte es zb events geben, die erstmal ganz einfach sind, es gibt ein datum und einen text dazu und dann kommt im spiel ein popup wenn das datum im spiel erreicht ist zb "die hindenburg katastrophe" soll 1938 kommen

die speicherung der karte und des spielstandes hat nichts mit dem ganzen zu tun, die speicherung läuft über was unity internes wovon ich auch noch keine ahnung hab aber die machen das mit irgend einer serialisierung die sie extra dafür gemacht haben
was ich halt verhindern will ist zb bei hearts of iron ist die länder einteilung so aufgebaut
die 1.ste txt schaut so aus
Java:
Germany GER
Russia RUS
die zweite txt datei schaut so aus
Code:
GER germany.txt
und die dritte schaut so aus
Code:
0001 Germany
0002 Russia
also 1000 dateien wo immer 1 sache angezeigt wird die irgendwie mit irgendwas verbunden ist... das zu verändern ist extrem scshwer und eig nicht verständlich, was ich halt verhindern will
vorallem wenn ich selber mehrere map einteilung machen will dann sollte wenn möglich nicht alles zerbrechen weil irgendwas in den 1000 dateien einen typo drin hat
 

Robert Zenz

Top Contributor
Verstehe.

Also Vorschlag, vielleicht solltest du dich an einer bestehenden Loesung orientieren, Tiled faellt mir da spontan ein. Die koennen auch hexagonale Karten, und haette den Vorteil das Leute die Karten dann in Tiled zeichnen koennen. Ist natuerlich etwas umfangreicher, aber ein weit etablierte Loesung, als ganz sicher brauchbar zumindest als Vorlage oder zum abschauen.
 
Y

yfons123

Gast
also unity hat schon einen tile editor im editor eingebaut also die hexagonale map hab ich schon, die anmalung die du im bild siehst hab ich halt "hard gecoded" gemacht was ich ändern will

wie meinst du das mit mischen?
gibts eig bei xmls konstanten die "sicher sind" verglichen mit entitys da zb die ressourcen immer gleich heißen
hab mal einen blick über xsd geworfen und da gehts ja werte zu ersetzen , aber kann das auch basis xml?
 

Robert Zenz

Top Contributor
also unity hat schon einen tile editor im editor eingebaut also die hexagonale map hab ich schon, die anmalung die du im bild siehst hab ich halt "hard gecoded" gemacht was ich ändern will

Ich meinte die Datei-Formate, du sollst dir mal die Formate anschauen wie die das speichern.

wie meinst du das mit mischen?

Wenn du Ereignisse in einem eigenen XML hast, kann man auch einfach Karte A mit Ereignissen B spielen, und dann nochmal mit Ereignissen C (man koennte sogar beliebig viele Ereignis-XMLs erlauben).

gibts eig bei xmls konstanten die "sicher sind" verglichen mit entitys da zb die ressourcen immer gleich heißen

Nein, nicht soweit ich weisz. Und ich habe es dir schonmal gesagt, und ich sage es dir wieder: Strings sind nicht grundsaetzlich boese! Nicht alles muss eine eigene Konstante sein.

hab mal einen blick über xsd geworfen und da gehts ja werte zu ersetzen , aber kann das auch basis xml?

Nein, nicht soweit ich weisz nicht.
 
Y

yfons123

Gast
wäre es gut es auf orsdner Basis zu machen dh es werden einfach in territory Ordner alle xml geparsed ohne dtd und ohne entity

zumindest wäre so die Idee damit ich es nach Lust und Laune aufteilen kann
 
Y

yfons123

Gast
ich habe mich am Grundprinzip an hearts of iron gehalten und europe universalis da paradox nur modbare spiele auf der Weltkarte machen
 

Robert Zenz

Top Contributor
wäre es gut es auf orsdner Basis zu machen dh es werden einfach in territory Ordner alle xml geparsed ohne dtd und ohne entity

Mach' erstmal nur eine Datei fuer die Karte fuer den Anfang, aufteilen kannst du es spaeter ja immer noch. Also erstmal eine funktionierende Variante auf die Beine stellen, dann siehst du ja auch direkt wo es hakt und wo man was besser oder anders machen kann.
 
Y

yfons123

Gast
um nochmal auf die dtd und entity gescichte zurück zu kommen also ich habe die möglichkeiten gefunden

1. DTD ignorieren
2. DTD parsen + maximale character länge die durch expandierende entitys passieren darf

angeblich sollte das parsen + maximale char länge langen für den xxe angriff, nur was gibts da sonst noch was man anstellen kann?
oder wars das schon :D

C#:
         // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        settings.ValidationType = ValidationType.DTD;
        settings.MaxCharactersFromEntities = 1000;
        settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);


        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create(Path.Combine(Application.streamingAssetsPath,"countryList.xml"), settings);

        // Parse the file.
        while (reader.Read());
das wird so mit den dtd processing und validation type in der microsoft doku vorgeschlagen was natürlich nichts heißen soll
( ja ich weis husch hushc weg mit c# ;) )
SAUCE: https://docs.microsoft.com/en-us/do...ttings.maxcharactersfromentities?view=net-6.0
 

Robert Zenz

Top Contributor
angeblich sollte das parsen + maximale char länge langen für den xxe angriff, nur was gibts da sonst noch was man anstellen kann?

settings.MaxCharactersFromEntities = 1000;

Das klingt nicht sicher. Okay, du beschraenkst die maximale Laenge von aufgeloesten Entities auf 1000...und mit den 1000 Zeichen kann man jetzt keinen Unfug mehr treiben? Dann kann der Angreifer halt nur noch Dateien lesen die kleiner sind als 1kb...macht die Sache jetzt aber nicht wirklich besser, oder? Mal abgesehen davon das man mit Entities zum Beispiel auch HTTP-Anfragen absetzen kann, unter anderem schaetze ich mal.
 
Y

yfons123

Gast
blöde sache :D

ich schau gerade xs an aber weis noch nicht ganz was ich damit anfangen sollte :D
 
Y

yfons123

Gast
Das klingt nicht sicher. Okay, du beschraenkst die maximale Laenge von aufgeloesten Entities auf 1000...und mit den 1000 Zeichen kann man jetzt keinen Unfug mehr treiben? Dann kann der Angreifer halt nur noch Dateien lesen die kleiner sind als 1kb...macht die Sache jetzt aber nicht wirklich besser, oder? Mal abgesehen davon das man mit Entities zum Beispiel auch HTTP-Anfragen absetzen kann, unter anderem schaetze ich mal.
hat pures xml eig auch das problem also wenn ich kein dtd oder entities her nehm
 
Y

yfons123

Gast
Das klingt nicht sicher.
ich hab jetzt mal auspropabiert um das zu machen was du vorgeschlagen hast

Java:
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Ignore;
        settings.ValidationType = ValidationType.None;

        var serializer = new XmlSerializer(typeof(Territories));
das dtd processing.Ignore macht dass alles was dtd ist weg geworfen wird

den validation type kann ich auf
Code:
XDR
DTD
XSR
NONE
AUTO
einstellen.. du hast ja gesagt einfach gar nichts also dann none? oder muss ich bei dem xml schema auch noch mit dem hammer drauf hauen dass es weg ist ? :D
 

Robert Zenz

Top Contributor
Ohne es jetzt zu kennen, aber None klingt schon nach dem Wort der Wahl in dem Fall. Dann wird das XML einfach nur gelesen und nie irgendwie validiert. Ich weisz gar nicht ob man XSD Dateien einbetten kann, aber die sollten dann ja auch einfach ignoriert werden.
 
Y

yfons123

Gast
Für einfaches serialisieren / deserialisieren brauchst Du kein xsd. Lass dann einfach diesen DTD schrott weg und gut ist es.

Das xsd kann das alles verkomplizieren, denn das serialisierte XML sollte dann natürlich auch die entsprechenden namespaces nutzen. Das muss man dann natürlich auch alles entsprechend angeben und dann muss aber auch alles richtig stimmen. Das kann gerade am Anfang, wenn man noch keine Ahnung davon hat, recht viel auf einmal ein und eine Fehlersuche stark verkomplizieren.
hat jetzt xsd auch solche schwachstellen wie dtd?

serialisieren mach ich es wie man es in java auch tut, ich geb ne klasse mit annotationen an und auf basis von der wird das eingelesene xml zu objekten umgebaut
 
Y

yfons123

Gast
Mach' erstmal nur eine Datei fuer die Karte fuer den Anfang, aufteilen kannst du es spaeter ja immer noch. Also erstmal eine funktionierende Variante auf die Beine stellen, dann siehst du ja auch direkt wo es hakt und wo man was besser oder anders machen kann.
so ich habe mir jetzt eine xml datei gebaut die ich auch benutzen kann
diese setzt die 3 bundesländer wies soll und die restlichen daten hab ich auch im spiel
dh vom code her passts
nur der aufbau erscheint zweifelhaft, da es 20 bis 30 länder werden und die xml ja dadurch ziemlich groß
XML:
<countries>
    <country name="Germany">
        <territories>
            <events URL="/Events/germanEvents.xml"></events>
            <units>
                <unit name="Luchs">
                    <location URL="../Resources/Luchs.fbx"/>
                </unit>
                <unit name="Infantry">
                    <location URL="../Resources/Infantry.fbx"/>
                </unit>
            </units>
            <territory name="Berlin">
                <buildings space="15">
                    <building type="military" amount="3" />
                    <building type="civilian" amount="5" />
                </buildings>
                <ressources>
                    <ressource type="oil" amount="4" />
                </ressources>
            </territory>
            <territory name="OberBayern">
                <buildings space="5">
                    <building type="civilian" amount="1" />
                </buildings>
                <ressources>
                    <ressource type="Steel" amount="4" />
                    <ressource type="Aluminium" amount="12" />
                </ressources>
            </territory>
            <territory name="NiederBayern">
                <buildings space="6">
                    <building type="military" amount="1" />
                    <building type="civilian" amount="3" />
                </buildings>
                <ressources>
                    <ressource type="Steel" amount="9" />
                </ressources>
            </territory>
        </territories>
    </country>
</countries>
 

Robert Zenz

Top Contributor
nur der aufbau erscheint zweifelhaft, da es 20 bis 30 länder werden und die xml ja dadurch ziemlich groß

Das ist XML. Dafuer bekommt man gute Lesbarkeit.

Anmerkungen von meiner Seite:

1. Wieso ist "events" unter "territories"?
2. Wieso ist "units" unter "territories"?
3. Einmal ist "type" kleingeschrieben, einmal grosz am Anfang.
4. Ist "buildings.space" der maximale Bauplatz?
5. "OberBayern" schreibt man "Oberbayern" (zumindest soweit ich weisz). In der deutschen Sprace gibt es eigentlich kein mittendrin grosz werden. Wenn das die "ID" sein soll vom Feld, ist es trotzdem falsch.

Aber wirkt sehr gut fuer mich.
 
Y

yfons123

Gast
XML:
<country name="Germany">
        <events URL="/Events/germanEvents.xml"></events>
        <units>
                <unit name="Luchs">
                    <location URL="../Resources/Luchs.fbx"/>
                </unit>
                <unit name="Infantry">
                    <location URL="../Resources/Infantry.fbx"/>
                </unit>
        </units>
        <territories>
            <territory name="Berlin">
                <buildings space="15">
                    <building type="military" amount="3" />
                    <building type="civilian" amount="5" />
                </buildings>
                <ressources>
                    <ressource type="oil" amount="4" />
                </ressources>
            </territory>
            <territory name="Oberbayern">
                <buildings space="5">
                    <building type="civilian" amount="1" />
                </buildings>
                <ressources>
                    <ressource type="Steel" amount="4" />
                    <ressource type="Aluminium" amount="12" />
                </ressources>
            </territory>
            <territory name="Niederbayern">
                <buildings space="6">
                    <building type="military" amount="1" />
                    <building type="civilian" amount="3" />
                </buildings>
                <ressources>
                    <ressource type="Steel" amount="9" />
                </ressources>
            </territory>
        </territories>
    </country>

soooo jetzt noch mal ein anlauf
ansich wären alle countries jetzt in einer datei, ich könnte auch jedes country in eine extra datei machen , soll man das tun oder lieber alles in eines?
 

Robert Zenz

Top Contributor
ansich wären alle countries jetzt in einer datei, ich könnte auch jedes country in eine extra datei machen , soll man das tun oder lieber alles in eines?

Ich wuerde alles in eine machen. Dann muss man nicht mit unterschiedlichen Dateien handieren.

Ist mir beim ersten Mal nicht aufgefallen, sorry. "URL" sollte klein sein, und der Pfad sollte nicht relativ sein, weil was passiert wenn ich folgendes mache:

XML:
<location URL="../../../../../../../../../../../etc/passwd"/>

Da waere besser wenn du Standard mit Namen machst:

XML:
<!-- Automatisch "Resources/Luchs.fxb" -->
<unit name="Luchs"/>

<!-- Expliziter Dateiname -->
<unit name="Coole Einheit mit Ä" filename="coole-einheit"/>

Und dann darauf achten dass du Pfade nicht aufloest, also das "../../../" nicht geht. Das gleiche gilt fuer die "Events".
 
Y

yfons123

Gast
also bau ich den pfad dann in meiner anwendung zusammen und geh dann in die datei rein

also "Resources/"+nationname+type+typname

und ich müsste überprüfen ob NUR abc buchtsaben drin sind und sonst nichts anderes
 

Robert Zenz

Top Contributor
Ja...also nichts was den Pfad veraendern koennte. Kann aber gut sein dass die API hier eine Moeglichkeit dafuer stellt, das weisz ich aber nicht.
 

Ähnliche Java Themen

Neue Themen


Oben