# wie xml dokument aufbauen



## yfons123 (13. Apr 2022)

ich hab mal als beispiel dieses xml dokument

```
<?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 (13. Apr 2022)

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 (13. Apr 2022)

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 (13. Apr 2022)

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:


```
<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.


----------



## yfons123 (13. Apr 2022)

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

```
<country name="Britain">
    
</country>
```


----------



## yfons123 (14. Apr 2022)

```
<!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


----------



## Robert Zenz (14. Apr 2022)

Wieso denn Entities?!


----------



## KonradN (14. Apr 2022)

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 (14. Apr 2022)

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.


```
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.


```
<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.


```
<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).


----------



## yfons123 (14. Apr 2022)

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 (14. Apr 2022)

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.


----------



## yfons123 (14. Apr 2022)

Robert Zenz hat gesagt.:


> 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.
> 
> 
> ```
> ...


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 

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


----------



## yfons123 (14. Apr 2022)

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 (14. Apr 2022)

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 (14. Apr 2022)

yfons123 hat gesagt.:


> 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.



yfons123 hat gesagt.:


> 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.



yfons123 hat gesagt.:


> 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.


----------



## yfons123 (14. Apr 2022)

KonradN hat gesagt.:


> 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?


Robert Zenz hat gesagt.:


> 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"


Robert Zenz hat gesagt.:


> Also erstens, C#?! VERRAETER!


hehe.. ich mach schon noch an meiner javafx bibliothek weiter die werd ich nciht einfach so verlassen 


Robert Zenz hat gesagt.:


> 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?


----------



## Robert Zenz (14. Apr 2022)

Wie genau ist denn dein Spielfeld aufgebaut? Eventuell ist da auch eine andere Loesung angebracht.


----------



## yfons123 (14. Apr 2022)

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 


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

```
Germany GER
Russia RUS
```
die zweite txt datei schaut so aus

```
GER germany.txt
```
und die dritte schaut so aus

```
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 (14. Apr 2022)

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.


----------



## Robert Zenz (14. Apr 2022)

Karte und Ereginisse wuerde ich aufteilen in zwei unterschiedliche XMLs (dann kann man auch mischen).


----------



## yfons123 (14. Apr 2022)

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 (14. Apr 2022)

yfons123 hat gesagt.:


> 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.



yfons123 hat gesagt.:


> 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).



yfons123 hat gesagt.:


> 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.



yfons123 hat gesagt.:


> 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.


----------



## yfons123 (14. Apr 2022)

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


----------



## yfons123 (14. Apr 2022)

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


----------



## Robert Zenz (14. Apr 2022)

yfons123 hat gesagt.:


> 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.


----------



## yfons123 (14. Apr 2022)

ich werds dann nochmal anstoßen wenn ich es habe


----------



## yfons123 (14. Apr 2022)

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 


```
// 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 (14. Apr 2022)

yfons123 hat gesagt.:


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





yfons123 hat gesagt.:


> 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.


----------



## yfons123 (14. Apr 2022)

blöde sache 

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


----------



## yfons123 (14. Apr 2022)

Robert Zenz hat gesagt.:


> 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


----------



## Robert Zenz (14. Apr 2022)

Nein, pures HTML ist einfach nur eine Struktur (es sei denn der Parser macht was komisches, wie URIs aufloesen, sollte aber keiner).


----------



## yfons123 (14. Apr 2022)

Robert Zenz hat gesagt.:


> Das klingt nicht sicher.


ich hab jetzt mal auspropabiert um das zu machen was du vorgeschlagen hast


```
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

```
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 ?


----------



## Robert Zenz (14. Apr 2022)

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.


----------



## yfons123 (14. Apr 2022)

ja das war auch ne Option hab ich vergessen zu schreiben


----------



## yfons123 (15. Apr 2022)

KonradN hat gesagt.:


> 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


----------



## yfons123 (15. Apr 2022)

Robert Zenz hat gesagt.:


> 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ß

```
<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 (15. Apr 2022)

yfons123 hat gesagt.:


> 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.


----------



## yfons123 (15. Apr 2022)

```
<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 (15. Apr 2022)

yfons123 hat gesagt.:


> 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:


```
<location URL="../../../../../../../../../../../etc/passwd"/>
```

Da waere besser wenn du Standard mit Namen machst:


```
<!-- 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".


----------



## yfons123 (15. Apr 2022)

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 (15. Apr 2022)

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.


----------

