首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Android存储库XML

解析Android存储库XML
EN

Stack Overflow用户
提问于 2013-06-05 10:42:13
回答 1查看 195关注 0票数 0

如何使用此结构解析XML:

代码语言:javascript
复制
<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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-05 11:02:56

解析XML和解析文件中的注释是两件完全不同的事情。

对于XML本身,您可以使用PHP的SimpleXml来解析它,但是在访问子元素时,您必须记住指定名称空间。

我们知道我们想要名称空间,也知道我们想要哪个名称空间,因为我们感兴趣的每个节点都以something:作为前缀。例如:

代码语言:javascript
复制
<sdk:version>2.0</sdk:version>

因此,在本例中,我们对sdk命名空间感兴趣。您可以在最上面的声明节点中找到名称空间的定义位置:

代码语言:javascript
复制
<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/77是一个版本号,所以如果您需要更新以使用不同的SDK,请记住这一点。

使用示例XML解析XML的一个小示例是:

代码语言:javascript
复制
// 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和非常详细的模式:

代码语言:javascript
复制
$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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16937815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档