如何使用此结构解析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>
...如何获得版本的?大小的?甚至得到生成日期?( 10月22日10:16:34 PDT 2009使用eclair 17704: Platform )。加个词。工具。医生。)对于每个SDK平台(sdk:platform)
非常的TNX
发布于 2013-06-05 11:02:56
解析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,请记住这一点。
使用示例XML解析XML的一个小示例是:
// 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 ...行,要么需要使用子字符串解析,要么构建一个可以解析它的正则表达式。我选择后一种方法来节省代码行,但这取决于你是否愿意这样做。
如果您想使用regex,并且这与示例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];输出:
清华10月22日10:16:34 PDT 2009
https://stackoverflow.com/questions/16937815
复制相似问题