PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   XML (https://www.php-resource.de/forum/xml/)
-   -   XML nach bestimmten String Parsen und in Array schreiben (https://www.php-resource.de/forum/xml/94047-xml-nach-bestimmten-string-parsen-und-in-array-schreiben.html)

Morpheus2100 09-10-2008 10:48

XML nach bestimmten String Parsen und in Array schreiben
 
Hallo Leute,

ich versuche eine XML Datei zu durchsuchen, auf einen bestimmten String.
Anhand dieses regulären Ausdrucks:
PHP-Code:

$tag '/time=".*"/'

Jetzt wollte ich eigentlich erreichen, dass er mit immer den String "time="0"" in den array schreibt und das hald für jeden passenden wert. Sprich er sollte letztlich dann so aussehen:
PHP-Code:

Array
(
    [
0] => time="0"
    
[1] => time="2"
    
[2] => time="3"


Aber irgenwie gibt er es mir so aus????
PHP-Code:

Array
(
    [
0] => time="0">{sdfgsdfg}{sdfgsdfgtime="2">{asdf}{asdftime="3">{asdf}{sdf}
Es wurden 3 Vorkommen von /time=".*"gefunden 

Weis allerdings nicht wieso?

Könnt ihr mir da weiterhelfen? Irgendwie seh ich nicht was da falsch sein soll?

Danke für eure Hilfe.

hier das skript:
PHP-Code:

$tag '/time=".*"/';
$inhalt file_get_contents('test.xml');
preg_match_all($tag,$inhalt,$treffer);

echo 
"<pre>";
print_r($treffer[0]);
echo 
"</pre>";

echo 
'<p>Es wurden '.count($treffer[0]).' Vorkommen von '.$tag.' gefunden'

die XML DATEI:
PHP-Code:

<?xml version="1.0" encoding="utf-8" ?>

<DataItems>
    <DataItem TYPEID="{sdfgsdfgsdfgsdfg}" now="10/6/2008 09:33:57" time="0">
        <Event>
            <InstanceID>{sdfgsdfg}</InstanceID>
            <ProviderID>{sdfgsdfg}</ProviderID>
            <Time TimeString="9/21/2008 22:53:01">39712.870162037</Time>
            <SourceName>Security</SourceName>
            <AgentComputer>sdfgs</AgentComputer>
            <Computer>sdfg</Computer>
            <Domain>sdfg</Domain>
            <CategoryNumber>2</CategoryNumber>
            <EventNumber>552</EventNumber>
            <EventType>8</EventType>
            <UserName>sdfgsdfg</UserName>
            <UserDomain>NT AUTHORITY</UserDomain>
            <Message><![CDATA[Logon attempt using explicit credentials:
 Logged on user:
     User Name:    sdfgsdfg
     Domain:        sdfgs
     Logon ID:        (0x0,0x3E7)
     Logon GUID:    {sdfgsdfg}
 User whose credentials were used:
     Target User Name:    sdfg
     Target Domain:    sdfgsdfg
     Target Logon GUID: -

 Target Server Name:    sdfgsdfg
 Target Server Info:    sdfgssdfg
 Caller Process ID:    4345345
 Source Network Address:    -
 Source Port:    -
 ]]></Message>
            <Category><![CDATA[Logon/Logoff ]]></Category>
            <MessageDLL>MsAuditE.dll</MessageDLL>
        </Event>
    </DataItem>
    <DataItem TYPEID="{asdfasd}" now="10/6/2008 09:33:57" time="2">
        <Event>
            <InstanceID>{asdf}</InstanceID>
            <ProviderID>{asdf}</ProviderID>
            <Time TimeString="9/21/2008 22:58:02">39712.8736342593</Time>
            <SourceName>Security</SourceName>
            <AgentComputer>asdf</AgentComputer>
            <Computer>asdf</Computer>
            <Domain>asdfasdf</Domain>
            <CategoryNumber>2</CategoryNumber>
            <EventNumber>552</EventNumber>
            <EventType>8</EventType>
            <UserName>asdf</UserName>
            <UserDomain>NT AUTHORITY</UserDomain>
            <Message><![CDATA[Logon attempt using explicit credentials:
 Logged on user:
     User Name:    asdf
     Domain:        asdf
     Logon ID:        (0x0,sdf)
     Logon GUID:    {asdf}
 User whose credentials were used:
     Target User Name:    asdf
     Target Domain:    asdf
     Target Logon GUID: -

 Target Server Name:    asdf
 Target Server Info:    sdf
 Caller Process ID:    836
 Source Network Address:    -
 Source Port:    -
 ]]></Message>
            <Category><![CDATA[Logon/Logoff ]]></Category>
            <MessageDLL>MsAuditE.dll</MessageDLL>
        </Event>
    </DataItem>
    <DataItem TYPEID="{38D93882-6459-11D2-A6E1-00A0C97148B7}" now="10/6/2008 09:33:58" time="3">
        <Event>
            <InstanceID>{asdf}</InstanceID>
            <ProviderID>{sdf}</ProviderID>
            <Time TimeString="9/26/2008 00:10:47">39716.9241666667</Time>
            <SourceName>asdf</SourceName>
            <AgentComputer>asdf</AgentComputer>
            <Computer>asdf</Computer>
            <Domain>asdf</Domain>
            <CategoryNumber>2</CategoryNumber>
            <EventNumber>22062</EventNumber>
            <EventType>4</EventType>
            <UserName>NETWORK SERVICE</UserName>
            <UserDomain>NT AUTHORITY</UserDomain>
            <Message><![CDATA[The Agent outgoing data processing has successfully resumed after being blocked. 
Management Group: asdf ]]></Message>
            <Category><![CDATA[MOM asdf ]]></Category>
            <MessageDLL>MOMMsgs.dll</MessageDLL>
        </Event>
    </DataItem>
</DataItems>


onemorenerd 09-10-2008 11:09

Schau dir mal print_r($treffer) an.

Morpheus2100 09-10-2008 11:35

Zitat:

Original geschrieben von onemorenerd
Schau dir mal print_r($treffer) an.

Hmm wird so angezeigt:
[PHP]
Array
(
[0] => Array
(
[0] => time="0">{sdfgsdfg}{sdfgsdfg} time="2">{asdf}{asdf} time="3">{asdf}{sdf}
[PHP]

Überseh ich da grad was?

onemorenerd 09-10-2008 11:44

Schau dir mal den Quelltext der Ausgabe von print_r($treffer) an.
Bei mir funktioniert dein oben geposteter Code wie erwartet. Bei dir ist offenbar noch der Modifier U (ungreedy) notwendig.

Morpheus2100 09-10-2008 12:09

AHHH GEil das war schon! Krass.

Hab das im PHP Resource Tutorial nicht gefunden! ;-)
Link zu Tutorial

Vielen Dank für deine Hilfe!

Schöne Grüße
Michael

P.S. ich hab jetzt mal gesucht was "ungreedy" wirklich macht, werde aber da nicht wirklich schlau?
Kann mir das jemand kurz erklären?

PHP-Code:

Dieser Modifikator kehrt die Gier von Quantifikatoren umsodass sie 
standardmäßig nicht gierig sind
aber gierig werdenwenn ihnen ein "?" 
folgtDas ist nicht mit Perl kompatibelEs kann auch innerhalb des 
Suchmusters mit dem Modifikator 
(?Uoder durch ein Fragezeichen hinter 
dem Quantifikator 
(z.B. .*?) gesetzt werden


TobiaZ 09-10-2008 13:02

Beispiel:

<b>Das</b> ist ein <b>Test</b>

Wenn mann nun die B-Tags parsen würde, erhältst du folgendes Ergebnis:

Ohne Ungready:
Das</b> ist ein <b>Test

Mit Ungreadsy:
Das - und - Test

Morpheus2100 09-10-2008 13:39

Ahha naja das ist ja schonmal was!

Was mir jetzt aber aufgefallen ist es sollte letzlich ein 2 gig Text Log file geparst werden, was mit php wohl nicht so der performance hit wird.
Hat jemand schonmal sowas gemacht mit PHP?

Hab mir das gleiche in perl nochmal geschrieben!

Vielen Dank für eure Hilfe!

unset 09-10-2008 13:40

Es heißt übrigens (un)greedy. Nur falls du mit der Schreibweise beim googlen Probleme hast ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:03 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG