0

I have an XML structure like this

<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>

I am trying to get specific info from the elements into PHP variables.

To get "vatno" I use:

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

But what if I need the county name for example?

I cannot use getElementsByTagName('text') as it would get the company name also using the element name "text".

2 Answers 2

1

You may be better off using SimpleXML, you can then access the various components in a more intuitive way. The example above would be something like...

$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;
}

So each sub element is accessed using ->.

If you wanted to stick with what you already had, you should be able to use...

$countyName = $xmlObject->item($i)->getElementsByTagName('text')->item(1)
->nodeValue;

Using item(1) will fetch the second instance of the <text> elements, so this assumes that the name will have this value as well.

Sign up to request clarification or add additional context in comments.

Comments

0

It works with SimpleXML if I use

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.