如何用这个结构解析XML:
<sdk:sdk-repository xmlns:sdk="http://schemas.android.com/sdk/android/repository/7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
Generated on Thu Oct 22 10:16:34 PDT 2009 using eclair-sdk 17704: Platform. Addon. Tools. Doc.
-->
<sdk:platform>
<sdk:version>2.0</sdk:version>
<sdk:api-level>5</sdk:api-level>
<sdk:codename/>
<sdk:revision>01</sdk:revision>
<sdk:min-tools-rev>
<sdk:major>3</sdk:major>
</sdk:min-tools-rev>
<sdk:description>Android SDK Platform 2.0, revision 1</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/android-2.0.html</sdk:desc-url>
<sdk:obsolete/>
<sdk:archives>
<sdk:archive arch="any" os="linux">
<sdk:size>75095268</sdk:size>
<sdk:checksum type="sha1">be9be6a99ca32875c96ec7f91160ca9fce7e3c7d</sdk:checksum>
<sdk:url>android-2.0_r01-linux.zip</sdk:url>
</sdk:archive>
<sdk:archive arch="any" os="macosx">
<sdk:size>74956356</sdk:size>
<sdk:checksum type="sha1">2a866d0870dbba18e0503cd41e5fae988a21b314</sdk:checksum>
<sdk:url>android-2.0_r01-macosx.zip</sdk:url>
</sdk:archive>
<sdk:archive arch="any" os="windows">
<sdk:size>76288040</sdk:size>
<sdk:checksum type="sha1">aeb623217ff88b87216d6eb7dbc846ed53f68f57</sdk:checksum>
<sdk:url>android-2.0_r01-windows.zip</sdk:url>
</sdk:archive>
</sdk:archives>
<sdk:layoutlib>
<sdk:api>4</sdk:api>
</sdk:layoutlib>
<sdk:uses-license ref="android-sdk-license"/>
</sdk:platform>
...
如何获得版本?大小和 ?甚至得到生成日期(星期四Oct 22 10:16:34 PDT 2009使用eclair-sdk 17704:平台。插件。工具。医生)。每个SDK平台(SDK: Platform)
very very TNX
解析XML和解析文件中的注释是完全不同的两件事。
关于XML本身,您可以使用PHP的SimpleXml
来解析它,但是您必须记住在访问子元素时指定名称空间。
我们知道我们需要名称空间,并且我们知道我们需要哪一个,因为我们感兴趣的每个节点都以something:
为前缀。例如:
<sdk:version>2.0</sdk:version>
因此,在本例中,我们对sdk
名称空间感兴趣。您可以在最上面的声明节点中找到定义名称空间的位置:
<sdk:sdk-repository xmlns:sdk="http://schemas.android.com/sdk/android/repository/7" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
声明sdk
命名空间为http://schemas.android.com/sdk/android/repository/7
。7
是一个版本号,所以如果你需要更新以使用不同的sdk,请记住这一点。
// load the file and create the XML element
$feed = file_get_contents("repository.xml");
$xml = new SimpleXmlElement($feed);
// define the namespace you need to use (we want xmlns:sdk)
$sdk = $xml->children("http://schemas.android.com/sdk/android/repository/7");
// get the "platform" root element and start using it's nodes
$platform = $sdk->platform;
echo 'Version: ' . $platform->version . "<br />";
echo 'Description: ' . $platform->description . "<br />";
foreach ($platform->archives->archive as $archive) {
echo 'Archive: ' . $archive->url . ", size: " . $archive->size . "<br />";
}
要匹配Generated on ...
行,您需要使用子字符串解析或构建一个可以解析它的正则表达式。我选择后一种方法来节省代码行,但这完全取决于您自己的选择。
如果您想使用正则表达式,并且这是非常特定于示例XML中的输出,因此您可能需要将其调整为更动态,您可以使用PHP的preg_match
和一个非常详细的模式:
$pattern = '/<!--['r'n's]*Generated on (.*) using eclair-sdk 17704: Platform'. Addon'. Tools'. Doc'.['r'n's]*-->/';
$comments = array();
preg_match($pattern, $feed, $comments);
echo $comments[1];
输出:星期四Oct 22 10:16:34 PDT 2009