簡體   English   中英

xpath查詢DOMNodeList對象([length] => 0)

[英]xpath query DOMNodeList Object ( [length] => 0 )

我想選擇具有特定屬性值的元素。 這是我的xml代碼的示例:

    <response>
<result name="response" numFound="1171" start="0" maxScore="1.0">
<doc>
<float name="score">1.0</float>
<arr name="bm_field_candidat_valid_indexing">
<bool>false</bool>
</arr>
<str name="content">
Etudiant, jeune diplômé Informatique, nouvelles technologies Bac+5 
</str>
<arr name="sm_field_candidat_telephone">
<str>0336548651</str>
</arr>
<arr name="sm_field_candidat_ville">
<str>madrid</str>
</arr>
<arr name="sm_field_profil_candidat_compete">
<str>
Logiciel(s) bureautique: Base de données (type Access...), Présentation (type Powerpoint...), Tableur (type Excel...), Traitement de texte (type Word...) | Langage(s) de programmation: C/C++, Delphi(5/6), VB(5/6), C++builder, Java, SQL, Merise, ASP | Logiciel(s): Dreamweaver
</str>
</arr>
<arr name="sm_vid_Career_levels">
<str>Etudiant, jeune diplômé</str>
</arr>
<arr name="sm_vid_Countries">
<str>Maroc</str>
<str>Liste non ordonnée</str>
</arr>
<arr name="sm_vid_Education_levels">
<str>Bac+5 et plus</str>
</arr>
<arr name="sm_vid_Languages">
<str>maternelle</str>
</arr>
<str name="ss_name_formatted">evinalio</str>
<str name="teaser">
Etudiant, jeune diplômé americaine Mr fant rue de Libourne  » Informatique, nouvelles technologies  
</str>
<arr name="tm_vid_13_names">
<str>maternelle arabe</str>
</arr>
</doc>
</result>
</response>

我想獲取由屬性名稱定義的值,這是我的代碼:

 $url = "http://192.168.164.237:nOther=&hl.fl=";
  $xml = simplexml_load_file($url);
  $string = $xml->asXML();
  $res = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS);
  $res = $res->xpath('//doc');

  $dom = new DOMDocument();
  $dom->preserveWhiteSpace = false;
  $dom->loadXml($res);
  $dom->saveXML();

  $xPath = new DOMXPath($dom); 
  $storeNodes = $xPath->query( '//arr[@name="sm_field_profil_candidat_compete"]');
  print_r($storeNodes);

這就是我得到的:

DOMNodeList對象([length] => 0)

您不能將SimpleXMLElement數組作為XML字符串加載。 使用dom_import_simplexml()

$docElement = $res->xpath('//doc')[0];
$docNode = dom_import_simplexml($docNode);
$domDocument = $docNode->ownerDocument();
$xpath = new DOMXpath($domDocument);

但是,這里根本不需要將響應加載到SimpleXML中:

$xml = file_get_contents($url);
$document = new DOMDocument();
$document->preserveWhiteSpace = false;
$document->loadXml($xml);
$xpath = new DOMXpath($document); 

$storeNodes = $xpath->query(
  '//doc//arr[@name="sm_field_profil_candidat_compete"]'
);
var_dump($storeNodes);

輸出:

object(DOMNodeList)#4 (1) {
  ["length"]=>
  int(1)
}

如果您有多個doc元素,則可以先獲取它們,然后將它們用作第二個表達式的上下文:

foreach ($xpath->query('//doc') as $docNode) {
  $storeNodes = $xpath->query(
    './/arr[@name="sm_field_profil_candidat_compete"]', $docNode
  );
  var_dump($storeNodes);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM