我的文件xml:
<pasaz:Envelope>
<pasaz:Body>
<loadOffe>
<offe>
<off>
<id>120023</id>
<name>my name John</name>
<name>Test</name>
</off>
</offe>
</loadOffe>
</pasaz:Body>
</pasaz:Envelope>
如何查看php(id和名称)。
如果您只是想寻找一种简单的方法来提取标记的内容,但又不想在正确解析XML时遇到所有麻烦,您可以这样做:
$xml = ""; // your xml data as a string
function get_tag_contents($xml, $tagName) {
$startPosition = strpos($xml, "<" . $tagName . ">");
$endPosition = strpos($xml, "</" . $tagName . ">");
$length = $endPosition - ($startPosition + 1);
return substr($xml, $startPosition, $length);
}
$id = get_tag_contents($xml, "id");
$name = get_tag_contents($xml, "name");
这假设您没有为标记分配任何属性,并且每个标记都是唯一的(在您给我们的示例中,我注意到了两个"name"标记,如果您想要这两个标记,则需要使此解决方案更加健壮或进行适当的XML解析)。
如何获取所有项目?示例(不起作用..)
$pliks = simplexml_load_file("file.xml");
foreach ($pliks->children('pasaz', true) as $body)
{
foreach ($body->children() as $loadOffe)
{
if ($loadOffe->offe->off) {
echo "<p>id: $loadOffe->id</p>";
echo "$id->id";
echo "<p>name: <b>$name->name</b></p>";
}
}
// echo $loadOffe->offe->off->id;
}
正如Marc B在他的评论中建议的那样,您应该使用DOM
,或者使用getElementsByTagName()
或DOMXPath
,例如getElementaByTagName()
:
$dom = new DOMDocument;
$dom->loadXML($xml);
$ids = $dom->getElementsByTagName('id');
if( $ids || !$ids->length){
throw new Exception( 'Id not found');
}
return $ids->item(0);