我试图在某些数据包上运行过滤器。接收我需要的信息。
我使用PHP <u i='550820' m='0'>
<n>
<![CDATA[supers0nic-]]>
</n>
<vars>
<var n='state' t='s'>
<![CDATA[0]]>
</var>
<var n='destinationX' t='n'>
<![CDATA[490.75]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[201.5]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
</vars>
</u>
<u i='550946' m='0'>
<n>
<![CDATA[cutie_lexi12]]>
</n>
<vars>
<var n='destinationX' t='n'>
<![CDATA[249.9]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[323.34999999999997]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[12731]]>
</var>
</vars>
</u>
来运行我的过滤器并查找任何匹配项。
遗憾的是,数据包确实包含不同的节点。
<u i='NEEDTHIS' m='0'>
<n>
<![CDATA[NEEDTHIS]]>
</n>
<vars>
<var n='state' t='s'>
<![CDATA[0]]>
</var>
<var n='destinationX' t='n'>
<![CDATA[NEEDTHIS]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[NEEDTHIS]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
</vars>
</u>
这是我试图接收的一个例子。重要的是被NEEDTHIS取代:
<var n='state' t='s'>
<![CDATA[0]]>
</var>
遗憾的是,我必须跳过节点中的某些部分,如下面的代码:
\<u i=\'([0-9]+)\' m=\'0\'\>\<n\>\<\!\[CDATA\[([a-z0-9\-\_\s]+)\]\]\>\<\/n\>\<vars\>\<var n=\'state\' t=\'s\'\>\<\!\[CDATA\[0\]\]>\<\/var\>\<var n=\'destinationX\' t=\'n\'\>\<\!\[CDATA\[([0-9\.]+)]\]\>\<\/var\>\<var n=\'destinationY\' t=\'n\'\>\<\!\[CDATA\[([0-9\.]+)]\]\>\<\/var\>\<var n=\'zchievements\' t=\'n\'\>\<\!\[CDATA\[([0-9]+)\]\]\>\<\/var\>\<\/vars\>\<\/u\>
因为这并不包含在每个节点中。
我的实际代码:
<var n='state' t='s'>
<![CDATA[0]]>
</var>
所以我需要跳过
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
和
notify:true
一部分。
我怎么会意识到这一点?
答案 0 :(得分:1)
以下是使用SimpleXml的示例。您可以像对象一样以对象/树形式访问已解析的XML。
<?php
$xml = <<<'JUSTUSEXML'
<u i='550820' m='0'>
<n>
<![CDATA[supers0nic-]]>
</n>
<vars>
<var n='state' t='s'>
<![CDATA[0]]>
</var>
<var n='destinationX' t='n'>
<![CDATA[490.75]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[201.5]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
</vars>
</u>
JUSTUSEXML;
// LIBXML_NOCDATA lets you access the CDATA tags.
$nodes = new SimpleXMLElement($xml, LIBXML_NOCDATA);
print_r($nodes);
foreach ($nodes->vars as $varList) {
foreach ($varList as $vars) {
$var = trim($vars[0]);
echo $var . "\n";
}
}
Jonathan Kuhn是对的。使用XML解析器来解析XML。过滤或简单地忽略你不需要的东西应该更容易。