Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
XML nach bestimmten String Parsen und in Array schreiben [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
XML nach bestimmten String Parsen und in Array schreiben


 
Morpheus2100
09-10-2008, 11:48 
 
Hallo Leute,

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

$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:

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


Aber irgenwie gibt er es mir so aus????

Array
(
[0] => time="0">{sdfgsdfg}{sdfgsdfg} time="2">{asdf}{asdf} time="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:

$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:

<?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, 12:09 
 
Schau dir mal print_r($treffer) an.

 
Morpheus2100
09-10-2008, 12:35 
 
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, 12: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, 13:09 
 
AHHH GEil das war schon! Krass.

Hab das im PHP Resource Tutorial nicht gefunden! ;-)
Link zu Tutorial (http://www.php-resource.de/tutorials/read/10/1/)

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?


Dieser Modifikator kehrt die Gier von Quantifikatoren um, sodass sie
standardmäßig nicht gierig sind, aber gierig werden, wenn ihnen ein "?"
folgt. Das ist nicht mit Perl kompatibel. Es kann auch innerhalb des
Suchmusters mit dem Modifikator (?U) oder durch ein Fragezeichen hinter
dem Quantifikator (z.B. .*?) gesetzt werden.

 
TobiaZ
09-10-2008, 14: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, 14: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, 14: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 04:44 Uhr.