使用PHP获取特定的XML元素值

时间:2017-12-10 15:36:10

标签: php xml dom

我有像这样的XML结构

<companies>
   <company>
      <vatno>12345678</vatno>
      <name>
         <founded>2013-12-31</founded>
         <text>XYZ Inc</text>
      </name>
      <location>
         <streetname>West Road</streetname>
         <county>
            <no>12345</no>
            <text>East County</text>
         <county>
      </location>
   </company>
</companies>

我正在尝试从元素中获取特定信息到PHP变量。

获得&#34; vatno&#34;我用:

$vatno = $xmlObject->item($i)->getElementsByTagName('vatno')->item(0)->childNodes->item(0)->nodeValue;

但是如果我需要县名呢?

我不能使用getElementsByTagName(&#39; text&#39;),因为它也会使用元素名称&#34; text&#34;来获取公司名称。

2 个答案:

答案 0 :(得分:1)

您可能最好使用SimpleXML,然后您可以以更直观的方式访问各种组件。 上面的例子就像......

stdout:0 -1

stderr:0 -1

syslog:0 -1

因此,使用sys.log访问每个子元素。

如果你想坚持你已有的东西,你应该能够使用......

$data = <<< XML
<companies>
   <company>
      <vatno>12345678</vatno>
      <name>
         <founded>2013-12-31</founded>
         <text>XYZ Inc</text>
      </name>
      <location>
         <streetname>West Road</streetname>
         <county>
            <no>12345</no>
            <text>East County</text>
         </county>
      </location>
   </company>
</companies>
XML;

$xml = simplexml_load_string($data);
foreach ( $xml->company as $company )   {
    echo $company->vatno.PHP_EOL;
    echo $company->location->county->text.PHP_EOL;
}

使用->将获取$countyName = $xmlObject->item($i)->getElementsByTagName('text')->item(1) ->nodeValue; 元素的第二个实例,因此这假定该名称也具有此值。

答案 1 :(得分:0)

如果我使用

,它适用于SimpleXML
$xml = simplexml_load_string($data);
foreach ( $xml->companies->company as $company )   {
    echo $company->vatno.PHP_EOL;
    echo $company->location->county->text.PHP_EOL;
}