dSteph 0 Geschrieben 5. Oktober 2022 Melden Teilen Geschrieben 5. Oktober 2022 Hallo, ich habe ein Problem und finde bisher nicht die richtige Lösung im Netz. Ich möchte automatisiert über unser Verwaltungstool ein bestimmtes Attribut aus einer XML auslesen. Soweit so gut. Nun stellt sich die XML aber in etwa so dar: <?xml version="1.0"?> <cfg:root ... > <xl:name ... /> <xl:name ... /> <xl:name ... /> ... <cfg:node ... /> <cfg:node ... mNumber="12345" ... /> </cfg:root> Wie komme ich nun am einfachsten und schnellsten an die mNumber (nur ein einziges Mal im XML)? Ich scheitere bisher an cfg:root bzw. cfg:name ... Könnt ihr mir weiterhelfen? Vielen Dank im Voraus! Gruß dSteph Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 5. Oktober 2022 Melden Teilen Geschrieben 5. Oktober 2022 Hi, im Worst Case und wenn die mNumber nur einmal vorkommt, geh das File zeilenweise durch. Ganz quick'n'dirty: $file = "<Pfad zur XML>" $sr = [System.IO.StreamReader]::new($file) while($sr.EndOfStream -eq $false){ $l = $sr.ReadLine() if($l -imatch "mNumber="){ $mNumber = ($l -split "mNumber=""")[1].Split("`"")[0] } } $mNumber Es könnte hier vermutlich helfen, wenn du eine komplette XML anfügst bzw. den Ausschnitt ohne Kürzungen. Gruß Jan Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 5. Oktober 2022 Melden Teilen Geschrieben 5. Oktober 2022 ...oder so (innerhalb der Schleife): if($l -imatch '^\s*\<cfg:node.*mNumber=\"(?<mNumber>\d+)\".*\>\s*$'){ $mNumber = $Matches['mNumber'] break } break hilft mit der Ausführungszeit, wenn es wirklich gesichert ist, dass der Pattern nur einmal vorkommt bzw. dass das erste Vorkommen ausreicht. Jede präzise Verarbeitung dieser XML erfordert die Data Definitions, die Du nicht mitgeliefert hast. 2 Zitieren Link zu diesem Kommentar
dSteph 0 Geschrieben 5. Oktober 2022 Autor Melden Teilen Geschrieben 5. Oktober 2022 (bearbeitet) <?xml version="1.0" encoding="UTF-16" standalone="no" ?> <CFG:root xmlns:CFG="http://www....Config" xmlns:dc="http://www....Changes" xmlns:meta="http://www....data" xmlns:pd="http://www....def" xmlns:ph="http://www....Header" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <pd:proDef> <xl:xliff hom:version="0.9" version="1.1" xmlns:hom="http://www....ECT" xmlns:xl="urn:oasis:names:tc:xliff:document:1.1"> <xl:file datatype="plaintext" original="file.ext" source-language="DE-DE"> <xl:header/> <xl:body> <xl:trans-unit id="10001" maxwidth="255" size-unit="char" translate="yes"> <xl:source>mNummer im Format 99-9999</xl:source> </xl:trans-unit> <xl:trans-unit id="10002" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Ersteller</xl:source> </xl:trans-unit> <xl:trans-unit id="10003" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Erstellungs Datum</xl:source> </xl:trans-unit> <xl:trans-unit id="10013" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Produktschlüssel</xl:source> </xl:trans-unit> <xl:trans-unit id="3" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Konfiguration der physikalischen Eigenschaften des Displays, auf dem das Framework angezeigt wird. Notwendig für die korrekte Darstellung</xl:source> </xl:trans-unit> <xl:trans-unit id="38" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Die Größe des Displays in Zoll. z.B. 19 für 19" Display</xl:source> </xl:trans-unit> <xl:trans-unit id="39" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Seitenverhältnis: Breite (z.B. 5)</xl:source> </xl:trans-unit> <xl:trans-unit id="40" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Seitenverhältnis: Höhe (z.B. 4)</xl:source> </xl:trans-unit> <xl:trans-unit id="40027" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Header Informationen</xl:source> </xl:trans-unit> <xl:trans-unit id="40028" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Generatorversion</xl:source> </xl:trans-unit> <xl:trans-unit id="40029" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Kunde</xl:source> </xl:trans-unit> <xl:trans-unit id="40030" maxwidth="255" size-unit="char" translate="yes"> <xl:source>statische Konfigurationsdaten</xl:source> </xl:trans-unit> <xl:trans-unit id="none" maxwidth="255" size-unit="char" translate="yes"> <xl:source>keine</xl:source> </xl:trans-unit> <xl:trans-unit id="readWrite" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Lesen/Schreiben</xl:source> </xl:trans-unit> <xl:trans-unit id="regexp" maxwidth="255" size-unit="char" translate="yes"> <xl:source>regulärer Ausdruck</xl:source> </xl:trans-unit> <xl:trans-unit id="required" maxwidth="255" size-unit="char" translate="yes"> <xl:source>benötigt</xl:source> </xl:trans-unit> <xl:trans-unit id="treeText" maxwidth="255" size-unit="char" translate="yes"> <xl:source>Text, der im Baum mit angezeigt wird.</xl:source> </xl:trans-unit> <xl:trans-unit id="optional" translate="yes"> <xl:source>optional</xl:source> </xl:trans-unit> <xl:trans-unit id="40031" translate="yes"> <xl:source>Faktor zur Skalierung der absoluten Abmessungen von Touch-Elementen / Controls (z.B. Höhe und Breite von Buttons). Faktor in Prozent mit einer Nachkommastelle</xl:source> </xl:trans-unit> <xl:trans-unit id="minmax" translate="yes"> <xl:source>Minimum/Maximum</xl:source> </xl:trans-unit> </xl:body> </xl:file> </xl:xliff> <pd:node namespaceName="http://www....Config" namespacePrefix="CFG" nodeName="node" rootNode="root" xsi:type="pd:global"> <pd:node build="0" major="1" minor="2" patch="0" xsi:type="pd:version"/> </pd:node> <pd:node xsi:type="pd:componentNodes"> <pd:node xsi:type="pd:childs"> <pd:node componentNode="Global" maxOccurs="1" minOccurs="1" xsi:type="pd:child"/> <pd:node componentNode="Config" maxOccurs="1" minOccurs="1" xsi:type="pd:child"/> </pd:node> <pd:node comment="" descriptionId="40027" insertCategory="" largeImage="global_gr.bmp" smallImage="global_kl.bmp" submodels="" xsi:type="pd:componentNode" xsiType="Global"> <pd:node xsi:type="pd:bases"/> <pd:node xsi:type="pd:childs"/> <pd:node xsi:type="pd:sets"/> <pd:node xsi:type="pd:attributes"> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="10001" dllClass="create_dll" dllName="" identifier="false" info1="z.B.: 19-2012" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="mNumber" permission="readWrite" presentationType="treeText" reference="" sortId="1" validationExpression="[a-zA-Z0-9][a-zA-Z0-9][-][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]" validationType="regexp" valueType="stringValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="40029" dllClass="create_dll" dllName="" identifier="false" info1="z.B.: Metall" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="Customer" permission="readWrite" presentationType="" reference="" sortId="2" validationExpression="" validationType="none" valueType="stringValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="10013" dllClass="create_dll" dllName="" identifier="false" info1="z.B.: O KUB210/A3" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="ProductKey" permission="readWrite" presentationType="" reference="" sortId="3" validationExpression="" validationType="none" valueType="stringValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="10002" dllClass="create_dll" dllName="" identifier="false" info1="z.B.: Ax" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="Creator" permission="readWrite" presentationType="" reference="" sortId="4" validationExpression="" validationType="none" valueType="stringValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="10003" dllClass="create_dll" dllName="" identifier="false" info1="JJJJ-MM-TT z.B. 2010-09-03 " info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="CreationDate" permission="readWrite" presentationType="" reference="" sortId="5" validationExpression="" validationType="none" valueType="dateValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="40028" dllClass="create_dll" dllName="" identifier="false" info1="z.B. 2.3.15.0" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="GeneratorVersion" permission="readWrite" presentationType="" reference="" sortId="6" validationExpression="\d+.\d+.\d+.\d+" validationType="regexp" valueType="stringValue" xsi:type="pd:attribute"/> </pd:node> </pd:node> <pd:node comment="" descriptionId="40030" insertCategory="" largeImage="" smallImage="tool.bmp" submodels="" xsi:type="pd:componentNode" xsiType="Config"> <pd:node xsi:type="pd:bases"/> <pd:node xsi:type="pd:childs"> <pd:node componentNode="Display" maxOccurs="1" minOccurs="0" xsi:type="pd:child"/> </pd:node> <pd:node xsi:type="pd:sets"/> <pd:node xsi:type="pd:attributes"/> </pd:node> <pd:node comment="" descriptionId="3" insertCategory="" largeImage="" smallImage="display_kl.bmp" submodels="" xsi:type="pd:componentNode" xsiType="Display"> <pd:node xsi:type="pd:bases"/> <pd:node xsi:type="pd:childs"/> <pd:node xsi:type="pd:sets"/> <pd:node xsi:type="pd:attributes"> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="38" dllClass="create_dll" dllName="" identifier="false" info1="" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="Diagonal" permission="readWrite" presentationType="treeText" reference="" sortId="1" validationExpression="" validationType="none" valueType="doubleValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="39" dllClass="create_dll" dllName="" identifier="false" info1="To use local real aspect ratio enter "0"" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="AspectRatioWidth" permission="readWrite" presentationType="" reference="" sortId="2" validationExpression="" validationType="none" valueType="longValue" xsi:type="pd:attribute"/> <pd:node attributeType="required" caseInsensitive="false" defaultValue="" descriptionId="40" dllClass="create_dll" dllName="" identifier="false" info1="To use local real aspect ratio enter "0"" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="AspectRatioHeight" permission="readWrite" presentationType="" reference="" sortId="3" validationExpression="" validationType="none" valueType="longValue" xsi:type="pd:attribute"/> <pd:node attributeType="optional" caseInsensitive="false" defaultValue="100" descriptionId="40031" dllClass="create_dll" dllName="" identifier="false" info1="" info1Description="" info2="" info2Description="" info3="" info3Description="" info4="" info4Description="" info5="" info5Description="" name="ControlScale" permission="readWrite" presentationType="" reference="" sortId="4" validationExpression="75;100" validationType="minmax" valueType="doubleValue" xsi:type="pd:attribute"/> </pd:node> </pd:node> </pd:node> <pd:node xsi:type="pd:enumTypes"/> </pd:proDef> <dc:documentChanges comment="true" log="true" recording="false"> <dc:changes/> </dc:documentChanges> <ph:proResultHeader companyId="" created="2011-03-09 15:11:43" creator="" info1="" info2="" info3="" info4="" info5="" modelVersion="5.2.0.0" modified="2011-09-28 13:09:27" modifier="" name="" type="" version="0.0.0.0"/> <CFG:node CreationDate="2019-10-07" Creator="ACB" Customer="NNNNNNN" GeneratorVersion="5.0.14.0" mNumber="08-5767" ProductKey="DUP" xsi:type="CFG:Global"/> <CFG:node xsi:type="CFG:Config"> <CFG:node AspectRatioHeight="1080" AspectRatioWidth="1920" ControlScale="100" Diagonal="21.5" xsi:type="CFG:Display"/> </CFG:node> </CFG:root> Hier nochmal die komplette XML, konnte heute früh nicht darauf zugreifen. Ich habe noch eine kleine Herausforderung: Powershell 2.0 Danke schonmal für die ersten Antworten, die scheitern noch am ::new($file) - wahrscheinlich der PS-Version geschuldet: Method invocation failed because [System.IO.StreamReader] doesn't contain a method named 'new'. At line:2 char:36 + $sr = [System.IO.StreamReader]::new <<<< ($file) + CategoryInfo : InvalidOperation: (new:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound bearbeitet 5. Oktober 2022 von dSteph Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Oktober 2022 Melden Teilen Geschrieben 5. Oktober 2022 (bearbeitet) vor 25 Minuten schrieb dSteph: Ich habe noch eine kleine Herausforderung: Powershell 2.0 Nur mal aus Neugier .... warum? Wenn ich mich nicht irre, sind alle Betriebssysteme, die mit einer PowerShell-Version kleiner 3.0 ausgeliefert wurden, schon ne Weile aus dem Support, oder? ... und selbst, wenn nicht - man könnte z.B. per UNC-Pfad auf die gewünschte XML-Datei zugreifen. Davon unabhängig - vergucke ich mich, oder ist in der kompletten XML-Datei die Du gepostet hast, das gewünschte Muster gar nicht vorhanden? ... also jedenfalls nicht so, wie Du es in Deiner ursprünglichen Frage angegeben hattest!? bearbeitet 5. Oktober 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
dSteph 0 Geschrieben 5. Oktober 2022 Autor Melden Teilen Geschrieben 5. Oktober 2022 vor 37 Minuten schrieb BOfH_666: Nur mal aus Neugier .... warum? Wenn ich mich nicht irre, sind alle Betriebssysteme, die mit einer PowerShell-Version kleiner 3.0 ausgeliefert wurden, schon ne Weile aus dem Support, oder? Ja, das ist richtig, aber das sind die Leiden der Industrie... Immerhin sind wir moderner unterwegs als der BART in San Francisco vor 39 Minuten schrieb BOfH_666: ... und selbst, wenn nicht - man könnte z.B. per UNC-Pfad auf die gewünschte XML-Datei zugreifen. Ja, manuell kann ich das, aber ich will die Daten in einem Tool weiterverarbeiten und brauche sie daher lokal... vor 41 Minuten schrieb BOfH_666: Davon unabhängig - vergucke ich mich, oder ist in der kompletten XML-Datei die Du gepostet hast, das gewünschte Muster gar nicht vorhanden? ... also jedenfalls nicht so, wie Du es in Deiner ursprünglichen Frage angegeben hattest!? Nun zum wichtigsten Punkt: Ja, du hast Recht, ich habe es korrigiert. Man findet nun mNumber="08-5767" in der XML. Zitieren Link zu diesem Kommentar
Beste Lösung testperson 1.677 Geschrieben 5. Oktober 2022 Beste Lösung Melden Teilen Geschrieben 5. Oktober 2022 Dann teste mal: $Content = Get-Content -Path "<Pfad zur XML>" foreach($l in $Content){ if($l -imatch "mNumber="){ $mNumber = ($l -split "mNumber=""")[1].Split("`"")[0] } } $mNumber Solange die Datei nicht "zu groß" ist / wird, sollte es damit dann funktionieren. Zitieren Link zu diesem Kommentar
dSteph 0 Geschrieben 5. Oktober 2022 Autor Melden Teilen Geschrieben 5. Oktober 2022 Vielen Dank, das funktioniert perfekt. Ich wollte die ganze Zeit die XML als solches auswerten, aber auf String-Ebene funktioniert natürlich auch. Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 5. Oktober 2022 Melden Teilen Geschrieben 5. Oktober 2022 vor 1 Stunde schrieb dSteph: Ich wollte die ganze Zeit die XML als solches auswerten, aber auf String-Ebene funktioniert natürlich auch. Dafür, wie ich bereits schrub, brauchst Du die Data Definitions. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.