0

データベースに値を持つ文字列フィールドがあります:

<ProductOrderItem>
<Product>
<ProductOffering>
<id>1</id>
</ProductOffering>
<ComponentProduct>
<ProductOffering>
<Id>10</Id>
</ProductOffering>
<CharacteristicValue>
<Characteristic>
<Name>Color</Name>
</Characteristic>
<Value>black</Value>
</CharacteristicValue>
<CharacteristicValue>
<Characteristic>
<Name>IMEI</Name>
</Characteristic>
<Value>imei100</Value>
</CharacteristicValue>
</ComponentProduct>
<ComponentProduct>
<ProductOffering>
<Id>11</Id>
</ProductOffering>
<CharacteristicValue>
<Characteristic>
<Name>MSISDN</Name>
</Characteristic>
<Value>063</Value>
</CharacteristicValue>
<CharacteristicValue>
<Characteristic>
<Name>IMSI</Name>
</Characteristic>
<Value>064</Value>
</CharacteristicValue>
</ComponentProduct>
</Product>
</ProductOrderItem>

私が試したとき:

$xml = new SimpleXMLElement($field);

例外が発生しています:

文字列を XML として解析できませんでした

Notepad++ で XML を検証したところ、「エラーは検出されませんでした」と表示されます。その文字列フィールドの一部のフィールドに、この XML 値が必要です。私の問題はどこですか?ありがとうございました

更新: 私のフィールドには値があります:

<?xml version="1.0" encoding="utf-8"?>
<ProductOrderItem><Product><ProductOffering><id>1</id></ProductOffering><ComponentProduct><ProductOffering><Id>10</Id></ProductOffering><CharacteristicValue><Characteristic><Name>Color</Name></Characteristic><Value>black</Value></CharacteristicValue><CharacteristicValue><Characteristic><Name>IMEI</Name></Characteristic><Value>imei100</Value></CharacteristicValue></ComponentProduct><ComponentProduct><ProductOffering><Id>11</Id></ProductOffering><CharacteristicValue><Characteristic><Name>MSISDN</Name></Characteristic><Value>063</Value></CharacteristicValue><CharacteristicValue><Characteristic><Name>IMSI</Name></Characteristic><Value>064</Value></CharacteristicValue></ComponentProduct></Product></ProductOrderItem>

しかし、それでも同じ例外です。

4

2 に答える 2

1
$filed='<?xml version="1.0" encoding="utf-8"?>
 <ProductOrderItem>
  <Product>
    <ProductOffering>
      <id>1</id>
    </ProductOffering>
    <ComponentProduct>
      <ProductOffering>
        <Id>10</Id>
      </ProductOffering>
      <CharacteristicValue>
        <Characteristic>
          <Name>Color</Name>
        </Characteristic>
        <Value>black</Value>
      </CharacteristicValue>
      <CharacteristicValue>
        <Characteristic>
          <Name>IMEI</Name>
        </Characteristic>
        <Value>imei100</Value>
      </CharacteristicValue>
    </ComponentProduct>
    <ComponentProduct>
      <ProductOffering>
        <Id>11</Id>
      </ProductOffering>
      <CharacteristicValue>
        <Characteristic>
          <Name>MSISDN</Name>
        </Characteristic>
        <Value>063</Value>
      </CharacteristicValue>
      <CharacteristicValue>
        <Characteristic>
          <Name>IMSI</Name>
        </Characteristic>
        <Value>064</Value>
      </CharacteristicValue>
    </ComponentProduct>
  </Product>
</ProductOrderItem>';

$xml = new SimpleXMLElement($filed);
print_r($xml );

チェックxmlにこの関数を使用します

function isXML($xml){
   libxml_use_internal_errors(true);

   $doc = new DOMDocument('1.0', 'utf-8');
   $doc->loadXML($xml);

   $errors = libxml_get_errors();

   if(empty($errors)){
       return true;
   }

   $error = $errors[0];
   if($error->level < 3){
       return true;
   }

   $explodedxml = explode("r", $xml);
   $badxml = $explodedxml[($error->line)-1];

   $message = $error->message . ' at line ' . $error->line . '. Bad XML: ' . htmlentities($badxml);
   return $message;
}

サンプルecho isXML($filed);

于 2013-04-05T09:46:51.847 に答える
-1

データベース (およびディスク上の一部のファイル) にも有効な XML があります。私はあなたにそれを送ることができます(あなたが本当にそれを見たいのであれば). ただし 、コードのコンテキストでは、有効な XML をどこかに置くだけではまったく役に立ちません。

$xml = new SimpleXMLElement($field);

$field取得した変数内にある文字列が有効な XMLであることは、はるかに重要です。また、エラー メッセージを理解するのに問題があった場合: に有効な XML がありません$field

必要な作業は、有効な XML をその変数に入れることだけです。

これは、最初にその変数の中に正確に何が入っているかを見つけることによって最もうまく機能します。次に、それを期待と比較することができます。おそらく、すぐに問題を見つけて修正するでしょう。

HTH。

(ヒント: 見つけた後もまだ壁にぶつかっている場合は、 の16 進ダンプを$field提供してください)。

于 2013-04-05T21:23:26.520 に答える