Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
gooly

In allen Dateien xml-Tags entfernen

Empfohlene Beiträge

Hallo,

ich habe über 100 xml-Dateien, von denen ich mit PowerShell den xml-code entfernen möchte.

Ich kopiere die Datein aus den originalen Verzeichnissen in ein einziges und jetzt soll der xml 'weg' damit ich sie in einen Textprogramm überprüfen kann.

Bei der Formulierung des Regex hapert's bei mir :(

 

Get-ChildItem -Path "C:\Users\cas\Documents\Wurzel_XML\" -Recurse |
    Where-Object Name -like "*.xml" | 
    Copy-Item -Destination "C:\Users\cas\Documents\check_xml\"
# Bis hier klappts
# jetzt alle xml-tag entfernen - leider entfernt das alles auch den Text :(
$newText = ($newText -replace "(?ms)^\s+<.*?</.*?>", "")
Get-ChildItem -Path "C:\Users\cas\Documents\check_xml\" |
    Set-Content -Value $newText

Vielen dank schon mal!

Gooly

PS: Wie so gibt es hier kein Highlighting für PowerShell (ich hab jetzt Perl genommen, ein verwandter im Geiste;) ?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 15 Minuten schrieb BOfH_666:

Wäre es nicht zielführender einfach einen XML-Editor zu nehmen, der z.B. den enthaltenen Text einfach anzeigen kann?

Neee - ich will eine Texteditor:

  1. wegen der wahrsch. besseren Rechtschreibprüfung
  2. Ich denke ich muss nicht die Dateien einzeln landen, sondern kann im Explorer zB, 10 auswählen und dann alle 10 auf einmal laden.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 4 Minuten schrieb Dukel:

Was für einen Text Editor hast du denn? Meiner kann auch XML Dateien lesen.

Aber der xml-tag ist dann noch nicht weg!! Da die xml-Datein einen Hilfetext beinhalten, werden daraus Texte erstellt und ich will die lesen so flüssig, wie der spätere Leser. Das xml stört gewaltig - ich will ja nicht den Code kontrollieren!!

bearbeitet von gooly

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 11 Minuten schrieb Dukel:

Kannst du mal ein Beispiel posten?

Warum?

Zum Korrektur lesen will ich ein anderes Bild haben, weil sonst die Gefahr größer ist, Fehler zu überlesen!

Ich frage doch nur nach einem regex für Powershell.

In Notepad++ funktioniert das ganz einfach mit <.+?> und dann ein ^\s+ die beide durch "" ersetzt werden.

Aber im Notepad++ müsste ich das dann wieder für jedes der über 100 Dateien machen - wozu hab ich einen PC, wenn ich dann doch alles händisch machen soll :(

 

Aber hier ist eine Teil

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../helpproject.xsl" ?><topic template="Default" lasteditedby="liliya" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../helpproject.xsd">
  <title translate="true">Passwörter verwalten</title>
  <body>
    <header>
      <para styleclass="Heading1"><text styleclass="Heading1" translate="true">Passwörter verwalten</text></para>
    </header>
    <para styleclass="Normal"><table styleclass="container" rowcount="3" colcount="2" style="width:970px;">
      <tr style="vertical-align:top">
        <td style="width:50%;">
          <para styleclass="H1"><text styleclass="H1" translate="true">Passwörter verwalten</text></para>

Der XML-Teil ist ~75% der ganzen Datei - damit will ich mich nicht befassen!

 

bearbeitet von gooly

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Weil man dir sonst schwer helfen kann.

Ich kann mir nicht vorstellen, wie deine XML Datei aussehen soll und was du genau haben willst!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Statt dem von oben muss ich nur das kontrollieren:

Zitat

Passwörter verwalten
Passwörter verwalten
Passwörter verwalten

(Im Notepad++ mit <.+?> uns ^\s+)

Was ist einfacher, sicherer und schneller zu kontrollieren?

bearbeitet von gooly

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Du sollst doch nur einfach eine (anonymisierte) Beispiel Datei posten und dich jetzt nicht rechtfertigen, warum du das brauchst.

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Dein Regex lautet:

<.*?>

Somit unbearbeitet:

$newText -replace "<.*?>", ""

Um die leerzeichen und leeren Zeilen zu entfernen:

($newText -replace "<.*?>", "").trim()|?{$_ -ne ''}

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Naja, damit:

$newText = ($newText -replace "<.*?>", "").trim()|?{$_ -ne ''} 
Get-ChildItem -Path "C:\Users\cas\Documents\check_xml\" |
    Set-Content -Value $newText

habe ich dasselbe Ergebnis  wie oben:  Alle Dateien sind leer :(

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wenn du das ganze in der Powershell (via Script, dann Dot-Sourced: . .\script.ps1) ausführst, was steht dann in der Variable? Ist diese auch leer?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 1 Stunde schrieb Dukel:

Wenn du das ganze in der Powershell (via Script, dann Dot-Sourced: . .\script.ps1) ausführst, was steht dann in der Variable? Ist diese auch leer?

Seufz dann müsst ich das Skript erst signieren lassen und das ist schon lange her, dass ich das gemacht hab :(

Ist das so schwierig - ist doch nur ein bisschen Text.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×