Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 14.12.12 11:46 
Hallo

Ich arbeite momentan an einem XML-Datei. Ich glauba lle wissen wie so eine XML Datei aufgebaut ist :)

Also ich möchte, dass das Tool die ganze XML Datei durchgeht und die Sätze löscht die am ene eine zwei haben.

Hier mal ein beispiel:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
<Personen.pdf>
  <Person>
    <Vorname>Manfred</Vorname>
    <Zuname>Fischer</Zuname>
    <Alter>45</Alter>
    <Adresse Ort="Berlin" Strasse="Bahnhofstr. 34"></Adresse>
  </Person>
  <Person>
    <Alter>23</Alter>
    <Adresse Ort="Aachen" Strasse="Neustr. 1"></Adresse>
  </Person>
</Personen>

<Personen_2.pdf>
  <Person>
    <Vorname>Manfred</Vorname>
    <Zuname>Fischer</Zuname>
    <Alter>45</Alter>
    <Adresse Ort="Berlin" Strasse="Bahnhofstr. 34"></Adresse>
  </Person>
  <Person>
    <Alter>23</Alter>
    <Adresse Ort="Aachen" Strasse="Neustr. 1"></Adresse>
  </Person>
</Personen>


Jetzt sollen die ganzen datensätze durchguckt werden und sobald ein Satz mit _2 kommt soll alles dazugehörige gelöscht werden.
Also sollte in diesem Beispiel der zwei Satz komplett aus der XML Datei gelöscht werden.

Weiß einer vllt. wie ich das schnell realisieren kann?

MfG

Edit: Danke an den MOD :)


Und noch was dazu, die XML-Tags sind nicht so einfach wie in diesem Beispiel, haben extrem lange namen, aber enden halt alle mit .pdf oder _2.pdf und er soll dann halt alle tags mit _2.pdf suchen und löschen.

Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.12.12 12:56 
Was ist für dich ein Satz? Ein XML besteht aus Elementen die haben wiederum Attribute und andere Elemente bzw. einen Text aber keinen Satz.
Die einzige "_2" sehe ich in einem Element Bezeichner. Wenn dem so ist ist das eher unglücklich und du solltest den Dateinamen in einem Attribut unterbringen und dem Element einen fixen Namen geben. So wie es auch bei Adresse ist.
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 14.12.12 13:24 
Mit Satz meine ich natürlich Elemente ^^

Nein also ich hab eine riesen XML Datei die in ungefähr so aufgebaut ist wie dem Beispiel im ersten Post.
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
<test:test addData:Path="c\\test.pdf" xmlns:test="http://www.test.xsd">
<!-- Weitere Elemente. -->
</test:test>

<test:test addData:Path="c\\test_2.pdf" xmlns:test="http://www.test.xsd">
<!-- Weitere Elemente. -->
</test:test>


So sind die Elemente in etwa aufgebaut, jz will ich was Basteln, dass den Element namen durch geht und sobald ein _2 oder sogar _3 gefunden wird gelöscht wird alle das ganze Element, mit den darin enthalten elementen und atribute.

Weißt du was ich ungefähr meine?

Lg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.12.12 13:48 
- Du hast offensichtlich eine passende XSD zur XML. Also kannst du einfach aus der XSD mit der xsd.exe aus dem NET. Framework eine entsprechende Klassenstruktur generieren. Dann kannst du mit dem XMLSerializer die XML da reinserialisieren und hast die Struktur ganz normal als Klassen im Speicher. Dort kannst du dann mit den den üblichen Sprachmitteln die Klassen durchsuchen und diejenigen nach deinen Kriterien löschen die du nicht mehr willst. Danach kannst du die geänderte Klassen Struktur wieder mit dem XMLSerializer in ein XML File serialisieren. Falls du mit groß wirklich groß meinst eher weniger geeignet.

- Alternativ kannst du auch per LINQtoXML mit einem LINQ Ausdruck alle betroffenen Elemente suchen und löschen.

- oder öffne das XML mit XMLDocument. Mit der SelectNodes Methode kannst du dann deine betroffenen Knoten (XPath Ausdruck) suchen, drüber iterieren und raus löschen

oder, oder, oder ...

der Möglichkeiten sind da viele.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 14.12.12 14:17 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
- Du hast offensichtlich eine passende XSD zur XML. Also kannst du einfach aus der XSD mit der xsd.exe aus dem NET. Framework eine entsprechende Klassenstruktur generieren. Dann kannst du mit dem XMLSerializer die XML da reinserialisieren und hast die Struktur ganz normal als Klassen im Speicher. Dort kannst du dann mit den den üblichen Sprachmitteln die Klassen durchsuchen und diejenigen nach deinen Kriterien löschen die du nicht mehr willst. Danach kannst du die geänderte Klassen Struktur wieder mit dem XMLSerializer in ein XML File serialisieren. Falls du mit groß wirklich groß meinst eher weniger geeignet.


Dankeschön :)

Wollte gerade die xsd.exe suchen, finde ich aber nicht :(
Weder auf dem Server, wo die XML Datei abgelegt ist, weder auf dem Link der in XML abgelegt ist(dort sagt er seite wurde nciht gefunden).
Wo kann ich den noch die xsd finden?
Oder muss ich die selber erstellen?

Lg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.12.12 14:54 
Zitat:
Wo kann ich den noch die xsd finden?


Zum Beispiel da wo in deinem XML steht das sie sein sollte? Aber ich sehe gerade das sieht eher nach Unsinn aus was in deinem XML steht. :( Habe nur irgendwas.xsd gesehen und dachte es wäre die Scheme Location ist aber nur dein Namespace.
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 14.12.12 15:14 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zum Beispiel da wo in deinem XML steht das sie sein sollte? Aber ich sehe gerade das sieht eher nach Unsinn aus was in deinem XML steht. :( Habe nur irgendwas.xsd gesehen und dachte es wäre die Scheme Location ist aber nur dein Namespace.


Ja also hier bei mir ist ein Link angegeben und wenn ich auf den Link gehe, findet er nicht's. und ansonsten kann ich die xsd nicht finden :(

Hast du vielleicht einen anderen vorschlag?

Lg

Edit: Habe jz mir die XML genau angeguckt weiter oben stehen zwei weitere Link's mit der endung xsd, habe beide im IE eingegeben und aufeinmal sind zwei unterschiedliche XML Dokumente aufgetaucht.? Ist vielleciht eines dieser beiden XML Dokumende die xsd?

Edit2:Ich habe jetzt einfach die XML Datei in Visual Studio gezogen und ich habe es dann einfach als .xsd file gespeichert, kann ich jetzt mit der datei genau das machen, was du mir gesagt hast?
Und wenn ja wie kann ich das machen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 14.12.12 16:02 
Sorry Vegeto aber wenn ich mir deine beiden Edits so ansehen ist mir dein Vorgehen zu LEGO. Du hast die Stichworte, du kannst lesen, also sieh dir an was es mit xsd in xml auf sich hat und entscheide dann ob dir das hilft und frag dann nach wie man das im Detail machen könnte oder sag uns warum dir das nicht hilft dann kann man eine Alternative empfehlen.

Aber einfach mal überall drauf klicken und gucken was passiert und dann jeden folgenden Step hier nachfragen ist sicherlich nichts wobei ich dir helfen möchte.

Für diesen Beitrag haben gedankt: Vegeto