Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Erledigt) - Script für XML Datei / Hilfe um Inhalt zu bearbeiten



Checcker
05.06.2018, 17:14
Hi,

ich hab hier eine .xml Datei von IT (Archiv.xml) . Die im Grunde aus solchen Teilen besteht:


<Archiv>
<Releasename>Filmname</Releasename>
<Folder>ß?:\????\sdgsdfs\</Folder>
<FTPServer>0</FTPServer>
<FTPFolder></FTPFolder>
<CrypterList>
<Crypter>
<Link></Link>
<Hoster>share-online.ahc</Hoster>
<HosterName>Share-Online.biz</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>
<Crypter>
<Link></Link>
<Hoster>share-online.ahc</Hoster>
<HosterName>Share-Online.biz</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>
<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>
<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>
</CrypterList>
</Archiv>

Dieser Abschnitt kommt in der XML natürlich häufiger vor. Nun möchte ich aber exakt diesen Teil entfernen:


<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>
<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>


Könnte mir da jemand behilflich sein entweder mit einem Script oder mir erklären wie ich da z. B. mit einem xml Editor hinbekomme.


Hier ein genaueres Beispiel wie die Datei die ich bearbeiten möchte zusammen gesetzt ist. Hoffe das geht soweit in Ordnung möchte hier ja eigentlich keine Links posten aber diese hier sind veraltet


https://pastebin.com/WxtYUDYW

HTCK
05.06.2018, 17:45
Nimm Visual Studio Code, öffne die Datei
-> markiere den zu entfernenden Teil -> Rechtsklick "Alle Vorkommen ändern" -> dann einfach löschen
Das sollte es gewesen sein.

Checcker
05.06.2018, 21:08
Ich denke mal wird aber nur gehen wenn der Inhalt hier immer gleich ist oder ?


<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>

Das Problem ist nämlich das der Inhalt zwischen <Link></Link> natürlich immer etwas anders ist da ein anderer Link enthalten ist. Hab hier nur die Daten gelöscht

Der Inhalt zwischen Hoster und HosterName ist der einzige der immer gleich ist. Der Rest ist immer etwas verschieden.

Hab den ersten Post mal editiert und noch genaueres Beispiel angehängt um zu zeigen wie genau die eigentlich Datei aufgebaut ist.

udg
05.06.2018, 22:51
Entweder ist es so einfach, dass ich zu kompliziert denke oder ich verstehe es nicht :D

es landet natürlich das zwischen <Link></Link>, was automatisch dahin gesendet wird aber wenn Du davon aus der xml etwas nicht brauchst, dann kannst Du doch in Notepad die Blöcke einfach löschen.

Es wird dann nur noch das ausgefüllt was in der XML vorhanden ist. Vorausgesetzt Du machst die Formatierung nicht kaputt ;)



<Crypter>
<Link></Link>
<Hoster></Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin></Plugin>
</Crypter>


wenn dieser Block also nicht gebraucht wird, dann löschen und den Rest von unten nach oben ranhängen, fertig.

Nimbus
06.06.2018, 09:37
Das Problem ist nämlich das der Inhalt zwischen <Link></Link> natürlich immer etwas anders ist da ein anderer Link enthalten ist. Hab hier nur die Daten gelöscht
Das ist als Beispiel natürlich maximal ungünstig. Abändern ja, aber nicht löschen. So machst du die Struktur kaputt, die man ja gerade braucht um die helfen zu können.
Das Pastebin Beispiel ist besser. Jetzt müsstest du uns nur noch verraten, was die Blöcke, die entfernt werden müssen besonders macht. Aktuell haben wir nur das zensierte Beispiel, bei dem 2 konkrete Blöcke entfernt werden sollen. Eine Regelmäßigkeit kann ich da spontan nicht erkennen, sodass es schwer wird die unerwünschten Blöcke zu identifizieren.

Checcker
06.06.2018, 09:51
Joa hätte wohl direkt das Pastebin bsp. posten sollen.

https://pastebin.com/WxtYUDYW <- (Kleiner Auszug der zu bearbeiteten .xml)

Möchte eben nun "einfach" nur diesen Block entfernen.


<Crypter>
<Link>https://www.filecrypt.cc/Container/E42815BF08.html</Link>
<Hoster>C:\IntelliTool\HosterPlugins\rapidgator.dll</Hoster>
<HosterName>Rapidgator.net</HosterName>
<Status>Unbekannt</Status>
<Plugin>C:\IntelliTool\CrypterPlugins\filecrypt.lcp</Plugin>
</Crypter>


Bzw. dieser Block kommt eben mehrfach vor in der gesamten .xml allerdings mit leicht unterschiedlichem Inhalt. Da eben die Links immer etwas unterschiedlich sind (Relink / Filecrypt sowie die Container ID) und eben der Status der Unbekannt / Offline / Online beinhalten kann. Das alles manuell zu entfernen würde mich locker 1-2-3 Std. kosten.


Was ich damit am Ende bewirken will ist das ich diese Rapidgator Links (Blocks) aus der XML entfernen kann und somit IntelliTool dort nicht mehr erneut hoch lädt.

Nimbus
06.06.2018, 10:37
Habe dir doch genau dafür mal ein Tool geschrieben (https://www.szenebox.org/29-entwicklung-programmierung/3309-suchen-und-ersetzten-mehrzeilig/). Hast du das nicht mehr? (ich habe es nicht)

EDIT: Das Beispiel weicht doch wieder vom tatsächlichen Inhalt ab, oder? Ohne die komplette Struktur ist mir das zu doof das schnell zusammen zu bauen...

Checcker
06.06.2018, 11:31
Stimmt jo erinnere mich noch so wage daran. Du hast mir das Tool nie zukommen lassen soweit ich das lese hattest du das damals für mich gemacht. Die komplette Datei schicke ich dir per PN

kra88
06.06.2018, 11:37
Ich hab dir mal eben ein kl. Script geschrieben!
Das Script geht bestimmt auch noch kürzer bzw. schneller...

Sprache = Autoit

Quellcode:



#include <array.au3>
#include <File.au3>


_start()

func _start()
Local $sSuchstring = "<HosterName>Rapidgator.net</HosterName>"
Local $aIndex[0]
local $sFilePath, $aArray


Local $message = "Bitte wählen Sie die Import Datei aus!"
Local $sFilePath = FileOpenDialog($message, @ScriptDir & "\", "xml (*.xml)", 1 + 4)

If @error Then
MsgBox(4096, "", "Keine Datei(en) ausgewählt")
Exit
Else
$sFilePath = StringReplace($sFilePath, "|", @CRLF)
_FileReadToArray($sFilePath, $aArray)
_ArrayDelete($aArray, 0)
EndIf


For $i = 0 to UBound($aArray)-1
if StringInStr($aArray[$i],$sSuchstring) Then
_ArrayAdd($aIndex,$i-1)
_ArrayAdd($aIndex,$i-2)
_ArrayAdd($aIndex,$i-3)
_ArrayAdd($aIndex,$i)
_ArrayAdd($aIndex,$i+1)
_ArrayAdd($aIndex,$i+2)
_ArrayAdd($aIndex,$i+3)
EndIf
Next


$sFilePath = StringReplace($sFilePath,".xml","_new.xml")


Local $hFileOpen = FileOpen($sFilePath, 2+8)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Es ist während dem lesen der Datei ein Fehler aufgetreten.")
Return False
EndIf

For $ii = 0 to UBound($aArray)-1
For $iii = 0 to UBound($aIndex)-1
If $ii = $aIndex[$iii] Then
$aArray[$ii]=""

Else
EndIf
Next
Next

For $i = 0 to UBound($aArray)-1
if $aArray[$i]="" Then
Else
FileWrite($hFileOpen,$aArray[$i]&@CRLF)
EndIf
Next
FileClose($hFileOpen)
MsgBox(64,"Fertig",$sFilePath)
EndFunc



zip entpacken
.exe starten
xml auswählen
fertig

es wird eine neue xml erstellt mit dem zusatz "_new" im Dateinamen

kra88
06.06.2018, 11:41
hab dir ein kl. Script geschrieben Moderator muss nur noch den Beitrag veröffentlichen dann kannst es im anhang laden.

udg
06.06.2018, 13:34
oder ich kann dir ein tool machen das die xml scannt und löscht was raus soll. wie auch immer. evtl. geht das von kra88 ja schon.
VG

Checcker
06.06.2018, 14:46
Funktioniert bestens Nimbus hat mir bereits die editierte xml geschickt. Aber das Script ist für die Zukunft natürlich sehr nice funktioniert auch soweit. Damit wäre das Thema erledigt. Vielen Dank euch. Versuche noch per PN euch etwas Geld als Dankeschön auf zu zwingen :)