0

この構造で 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>
...

バージョンを取得するにはどうすればよいですか? とサイズ? さらに、各 SDK プラットフォーム (sdk:platform) の生成日 ?( eclair-sdk 17704 を使用した PDT 2009 年 10 月 22 日 10:16:34: Platform. Addon. Tools. Doc. ) を取得します。

非常に非常にTNX

4

1 に答える 1

1

XML の解析とファイル内のコメントの解析は、2 つの完全に別のものです。

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 ...には、部分文字列の解析を使用するか、それを解析できる正規表現を作成する必要があります。私はコード行数を節約するために後者のオプションを選択していますが、それをどのように行うかはあなた次第です。

正規表現を使用したいが、これがサンプル XML の出力に非常に固有であるため、より動的になるように調整する必要がある場合は、PHPpreg_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];

出力:

2009 年 10 月 22 日 (木) 10:16:34 PDT

于 2013-06-05T11:02:56.830 に答える