0

私はこれにアプローチする方法に完全にこだわっています。基本的に、他の情報とともにxmlを返すcurl呼び出しがあり、基本的には、返されたデータのxml部分のみを取得し、それを別の変数に設定する必要があります。たとえば

  array(
    ['name']='john',
    ['location']='california',
  )

  <?xml version="1.0"?>
     <data>
       <name>somename</name>

    </data>

   array(
    ['name']='john',
    ['location']='california',
  )

  array(
    ['name']='john',
    ['location']='california',
  )

したがって、このデータ全体の XML 部分のみが必要です。どこから始めればいいのかわからないので、誰かが私を助けてくれます。

4

3 に答える 3

4

前置きとして、何をしていても、これはほぼ確実に間違った方法であることに注意することが重要です。このデータを生成するアプリケーションを操作して、厳密に定義された形式でデータを生成するようにしてください。

この回答の目的のために、この場合は不可能であると仮定します。


これに対する答えは、正規表現を使用して残りのデータから XML を抽出することです。

しかし、この正規表現を提供しようとする他の両方の回答は、一般的なユースケースには十分ではありません。これが私がすることです:

@
    (?:<\?xml.*?\?>\s*)?             # optionally match the XML declaration
    <([^/]\S*)[^>]*>                 # match opening tag and capture the tag name
    (?:                              # group alternates together
        (?>                          # atomic group for efficiency
            (?:(?!</?[^/>]+[^/]>).)+ # match everything up to the next long tag
        )
      | (?R)                         # ...or a recursive match of the expression
    )*                               # ...zero or more times
    </\1>                            # match the closing tag
@isx

これは、決定的に、探している XML が整形式であることを前提としています。検索する XML が適切な形式であることが 100% 確実でない限り、正規表現をこのタスクに使用することはできません

その場合、この式は、特定の文字列内にネストされた完全な XML ドキュメントと一致し、タグ名がドキュメント要素と自己終了タグに一致する要素などのトラップに対処できます。

動いているのを見る

于 2013-04-10T01:21:32.023 に答える
0

<?xml version="1.0"?>正規表現を使用して、XML ヘッダー ( ) とルート要素 ( )を検出できるはずです<data>。それができたら、あとは終了タグ ( </data>)を検出するだけです。もみ殻から分離された小麦!

于 2013-04-09T23:42:22.177 に答える