1

PHPで変数を取得しようとしているXMLファイルがあります。XML ファイルは次のようになります。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcq="http://purl.org/dc/terms/" xmlns="http://www.skype.com/go/skypeweb">
<Status rdf:about="urn:skype:skype.com:skypeweb/1.1">

ここで完全な XML ファイルを表示できます: http://mystatus.skype.com/username.xml

simplexml 拡張機能を使用して、xml 入力を PHP オブジェクトに変換しました$xml。後でファイル内を移動しようとすると:

$variable = $xml->rdf:RDF->Status->presence;

「rdf:RDF」のコロンが原因でエラーが発生します。

解析エラー: 構文エラー、予期しない ':'

コロンをエスケープするか、XML ファイルを変更せずにファイル内を移動するにはどうすればよいですか?

4

2 に答える 2

4

If I'm not mistaken, simplexml starts off positioned at the document (top) element, so you don't need to worry about rdf:RDF in this case. Just try:

$xml->Status->presence

In general, it seems the way to access a node with a particular namespace is to use ->children(namespaceUri), as in:

$xml->children('http://www.w3.org/2005/Atom')->entry->title

for something like this:

<a:feed xmlns:a="http://www.w3.org/2005/Atom">
   <a:entry>
      <a:title>hello</a:title>
   </a:entry>
</a:feed>
于 2013-01-10T02:43:42.817 に答える
1

あなたの初期コード:

$variable = $xml->rdf:RDF->Status->presence;

構文エラーを作成しているため、機能しません:

解析エラー: 構文エラー、予期しない ':' /test.php の 8 行目

プロパティ名のコロンは無効です。それを処理する PHP の一般的な方法は中括弧です。

$xml->{'rdf:RDF'}->Status->presence

その後、未定義のプロパティ通知が表示されることがわかりました。

注意: 8 行目で /test.php の非オブジェクトのプロパティを取得しようとしています

そのようなプロパティは存在しないため、これは直接的なものであり、次のvar_dumpことを示しています。

var_dump($xml);

class SimpleXMLElement#1 (1) {
  public $Status =>
  class SimpleXMLElement#2 (2) {
    public $statusCode =>
    string(1) "1"
    public $presence =>
    array(13) {
      [0] =>
      string(1) "1"
      ...
    }
  }
}

ただし、それとは別に、名前空間のプレフィックス要素名を持つ子が存在する場合でも、そのようには機能しません。これはまったく機能しないため、常にそのようなプロパティは定義されていません。

ただし、前のダンプの概要は、探しているプロパティ$Statusあるということです: :

$variable = $xml->Status->presence;

だから、あなたはちょうど間違った場所を見ていました。はvar_dump($variable)

class SimpleXMLElement#4 (13) {
    string(1) "1"
    string(7) "Offline"
    string(12) "Déconnecté"
    string(7) "Offline"
    string(15) "オフライン"
    string(6) "離線"
    string(6) "脱机"
    string(7) "Offline"
    string(7) "Offline"
    string(12) "Non in linea"
    string(12) "Desconectado"
    string(15) "Niepodłączony"
    string(7) "Offline"
}
于 2013-01-10T13:09:28.030 に答える