Jump to content

XML-Attribut per Powershell auslesen


Direkt zur Lösung Gelöst von testperson,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
<?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 &quot;0&quot;" 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 &quot;0&quot;" 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 von dSteph
Link zu diesem Kommentar
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?  :hmmm:  ... also jedenfalls nicht so, wie Du es in Deiner ursprünglichen Frage angegeben hattest!?

bearbeitet von BOfH_666
Link zu diesem Kommentar
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 :lool:

 

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?  :hmmm:  ... 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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...