Как анализировать XML-файл с пространствами имен?

Я знаю, что подобные вопросы были опубликованы ранее, но я не могу разобрать этот XML-файл с пространствами имен.

Вот ссылка на него, потому что она слишком велика для публикации здесь: https://tsdrapi.uspto.gov/ts/cd/casestatus/sn86553893/info.xml

Я пробовал использовать simplexml_load_file но не создавал объект xml. Затем я нашел похожие проблемы и попробую что-то вроде этого, если я уже загрузил файл с именем it 86553893.xml

Вот мой php-код:

 $xml= new SimpleXMLElement("86553893.xml"); foreach($xml->xpath('//com:ApplicationNumber') as $event) { var_export($event->xpath('com:ApplicationNumberText')); } 

Related of "Как анализировать XML-файл с пространствами имен?"

Вам нужно будет зарегистрировать пространства имен для каждого элемента, который вы хотите использовать:

 $xml= new SimpleXMLElement("86553893.xml"); $xml->registerXpathNamespace('com', 'http://www.wipo.int/standards/XMLSchema/Common/1'); foreach ($xml->xpath('//com:ApplicationNumber') as $event) { $event->registerXpathNamespace( 'com', 'http://www.wipo.int/standards/XMLSchema/Common/1' ); var_export($event->xpath('com:ApplicationNumberText')); } 

В DOM это различно, вы используете экземпляр DOMXPath, поэтому это только один объект, и вам придется регистрировать пространства имен только один раз.

 $dom = new DOMDocument(); $dom->load("86553893.xml"); $xpath = new DOMXpath($dom); $xpath->registerNamespace('com', 'http://www.wipo.int/standards/XMLSchema/Common/1'); foreach ($xpath->evaluate('//com:ApplicationNumber') as $event) { var_export($xpath->evaluate('string(com:ApplicationNumberText)', $event)); } 

Вам нужно передать 3-й параметр как true :

 <?php $xml= new SimpleXMLElement("info.xml", NULL, true); foreach($xml->xpath('//com:ApplicationNumber') as $event) { var_export($event->xpath('com:ApplicationNumberText')); } 

Вывод:

 array ( 0 => SimpleXMLElement::__set_state(array( )), ) 

вы можете больше узнать о SimpleXMLElement в:

http://php.net/manual/en/simplexmlelement.construct.php