0

不太确定我在解析/阅读xml文档时做错了什么。我的猜测是它没有标准化,我需要一个不同的过程来从字符串中读取任何内容。

如果是这样的话,那么我很高兴知道有人会如何阅读 xml。这就是我所拥有的,以及我正在做的事情。

例子.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="someurl.php"?>
<response>
 <status>Error</status>
 <error>The error message I need to extract, if the status says Error</error>
</response>

read_xml.php

<?php
 $content = 'example.xml';
 $string = file_get_contents($content);
 $xml = simplexml_load_string($string);
 print_r($xml);
?>

我没有从print_r.
我将其切换xml到更标准的东西,例如:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

...而且效果很好。所以我确定这是由于非标准格式,从我得到它的源传回的。

我将如何提取<status><error>标签?

4

2 回答 2

0

我更喜欢使用 PHP 的 DOMDocument 类。

尝试这样的事情:

<?php

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="someurl.php"?>
<response>
 <status>Error</status>
 <error>The error message I need to extract, if the status says Error</error>
</response>';

$dom = new DOMDocument();
$dom->loadXML($xml);

$statuses = $dom->getElementsByTagName('status');
foreach ($statuses as $status) {
    echo "The status tag says: " . $status->nodeValue, PHP_EOL;
}
?>

演示:http ://codepad.viper-7.com/mID6Hp

于 2013-07-22T22:01:21.587 回答
0

Tek 有一个很好的答案,但如果你想使用SimpleXML,你可以尝试这样的事情:

<?php  

$xml = simplexml_load_file('example.xml');
echo $xml->asXML(); // this will print the whole string
echo $xml->status; // print status
echo $xml->error; // print error

?>

编辑:如果您的 XML 中有多个<status><error>标签,请查看以下内容:

$xml = simplexml_load_file('example.xml');
foreach($xml->status as $status){
    echo $status;
}
foreach($xml->error as $error){
    echo $error;
}

我假设<response>是你的根。如果不是,请尝试$xml->response->status$xml->response->error

于 2013-07-22T22:10:19.323 回答