1

XML、私は持っています:

<?xml version="1.0" encoding="windows-1252" ?> 
    - <Tables>
        - <Table name="I_BOOKING">
            - <Row action="UPDATE" success="Y">
              <Field name="AUTOBOOK">888800</Field> 
              <Field name="TOUROP">01</Field> 
              <Field name="REFERENCE">GSDFFD</Field> 
              <Field name="NBPAX">2</Field> 
              <Field name="NBINF">1</Field> 
              </Row>
      </Table>
      - <Table name="I_EXCDATERESA">
          - <Row action="UPDATE" success="Y">
               <Field name="EXCURS">KNO</Field> 
               <Field name="DATE">2012-04-12</Field> 
               <Field name="BOOKNR">125445</Field> 
               <Field name="NAME">TEST 12/4</Field> 
               <Field name="PICKUPTIME">00:00:00</Field> 
           </Row>
         - <Row action="UPDATE" success="Y">
               <Field name="EXCURS">KNO</Field> 
               <Field name="DATE">2012-04-13</Field> 
               <Field name="BOOKNR">14574575</Field> 
               <Field name="NAME">TEST 13/4</Field> 
               <Field name="PICKUPTIME">00:00:00</Field> 
          </Row>
       </Table>
    </Tables>

table を扱うときはI_EXCDATERESA、 Field の値を取得する必要があります。BOOKNRつまり12544514574575この例では、扱っている行に従って、それをロードします$autobook

...

$simplexml = simplexml_import_dom($dom);

foreach ($simplexml->Table as $value)
{
    $tableName = $value->attributes()->name;
    foreach ($value->Row as $value)
    {
        if ($tableName == 'I_EXCDATERESA')
        {
            if ($value->Field->attributes()->name == 'BOOKNR')
            {
            $autoBook = $value->Field; 

これは機能してい$autobookません。ロードされていません。最初の「フィールド」ではなく、3 番目にあるためです。

4

4 に答える 4

2

これは、XPath の優れた使用例です。

$search = $simplexml->xpath('/Tables/Table[name="I_EXCDATERESA"]/Row/Field[name="BOOKNR"]');
于 2012-04-14T10:26:36.177 に答える
1

この状況にアプローチする方法はいくつかあります

  1. DOMの使用

  2. ここで取り上げたsimplexml内のattribute()関数を使用する

  3. おそらく最も簡単なオプションは、BOOKNERがすべての行の3番目のノードであることに気付くことです。私はこのようなことをします。

    for($ i = 0; $ i <count($ simplexml->-> children()); $ i ++){echo $ simplexml-> Table [$ i]-> Table-> Field [2]; }

幸運を

于 2012-04-14T09:51:24.803 に答える
1

これをテストしてください、それは私のために働いた:

foreach ($simplexml->Table as $value)
{
    $tableName = $value->attributes()->name;
    foreach ($value->Row as $value_1)
    {
        if ($tableName == 'I_EXCDATERESA')
        {
            foreach ($value_1->Field as $value_2)
            {
                if ($value_2->attributes()->name == 'BOOKNR')
                {
                    $autoBook = $value_2[0];
                    echo $autoBook;
                }
            }
        }
    }
}

あなたの問題は次のとおりです。

 $value->Field->attributes()->name=='BOOKNR'

それは多すぎます: elemts 行の各フィールドに別のサイクルを追加しました!

于 2012-04-14T10:09:58.337 に答える