使用PHP获取xml中的子元素

时间:2011-06-14 18:29:04

标签: php xml

我有一个xml文件,我需要解析并获取值。下面是xml的snippit

    <?xml version="1.0"?>
<mobile>
  <userInfo>
  </userInfo>
  <CATALOG>
    <s0>
      <SUB0>
        <DESCR>Paranormal Studies</DESCR>
        <SUBJECT>147</SUBJECT>
      </SUB0>
    </s0>
    <sA>
      <SUB0>
        <DESCR>Accounting</DESCR>
        <SUBJECT>ACCT</SUBJECT>
      </SUB0>
      <SUB1>
        <DESCR>Accounting</DESCR>
        <SUBJECT>ACCTG</SUBJECT>
      </SUB1>
      <SUB2>
        <DESCR>Anatomy</DESCR>
        <SUBJECT>ANATOMY</SUBJECT>
      </SUB2>
      <SUB3>
        <DESCR>Anthropology</DESCR>
        <SUBJECT>ANTHRO</SUBJECT>
      </SUB3>
      <SUB4>
        <DESCR>Art</DESCR>
        <SUBJECT>ART</SUBJECT>
      </SUB4>
      <SUB5>
        <DESCR>Art History</DESCR>
        <SUBJECT>ARTHIST</SUBJECT>
      </SUB5>
    </sA> 

所以,我需要抓住<sA>的所有子元素,然后有更多元素称为<sB>

但我不知道如何使用<sA><sB>等获取所有子元素。

3 个答案:

答案 0 :(得分:2)

这个怎么样:

$xmlstr = LoadTheXMLFromSomewhere();

$xml = new simplexml_load_string($xmlstr);

$result = $xml->xpath('//sA');

foreach ($result as $node){
  //do something with node
}

PHP确实有一个很好的类来访问XML,出于某种原因,它被称为SimpleXml,如果你的代码只访问XML的一部分(也就是查询xml),请考虑大量使用它。另外,考虑使用XPath进行查询,这是最好的方法

请注意,我仅使用sA节点执行了示例,但您可以非常轻松地为其他节点类型配置代码。

希望我能帮忙!

答案 1 :(得分:0)

你应该调查simplexml_load_string()因为我很确定这会让你的生活变得更轻松。它返回一个你可以使用的StdObject:

$xml = simplexml_load_string(<your huge xml string>);
foreach ($xml->hpt_mobile->CATALOG->sA as $value){
    // do things with sA children 
}

答案 2 :(得分:0)

$xml = new DOMDocument();
        $xml->load('path_to_xml');
$htp = $xml->getElementsByTagName('hpt_mobile')[0];
$catalog = $htp->getElementsByTagName('CATALOG')[0]
$nodes = $catalog->getElementsByTagName('sA')->childNodes;