Отображение атрибутов XML в PHP - PullRequest
0 голосов
/ 06 августа 2020

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

У меня есть этот python код под этим запросом информации об организации.

Примечание. Переменная «target» с комментариями предназначена для будущего использования, когда я прохожу пользовательский ввод из php в этот python скрипт.

import requests, sys
#target = sys.argv[1]
target = "logitech"


request = requests.get('http://whois.arin.net/rest/nets;name={}'.format(target))


print(request.text)

Вывод аналогичен этому, но количество тегов netRef может варьироваться в зависимости от организации.

<?xml version='1.0'?><?xml-stylesheet type='text/xsl' href='http://whois.arin.net/xsl/website.xsl' ?><nets xmlns="http://www.arin.net/whoisrws/core/v1" xmlns:ns2="http://www.arin.net/whoisrws/rdns/v1" xmlns:ns3="http://www.arin.net/whoisrws/netref/v2" copyrightNotice="Copyright 1997-2020, American Registry for Internet Numbers, Ltd." inaccuracyReportUrl="https://www.arin.net/resources/registry/whois/inaccuracy_reporting/" termsOfUse="https://www.arin.net/resources/registry/whois/tou/"><limitExceeded limit="256">false</limitExceeded>
<netRef endAddress="173.8.217.111" startAddress="173.8.217.96" handle="NET-173-8-217-96-1" name="LOGITECH">https://whois.arin.net/rest/net/NET-173-8-217-96-1</netRef>
<netRef endAddress="50.193.49.47" startAddress="50.193.49.32" handle="NET-50-193-49-32-1" name="LOGITECH">https://whois.arin.net/rest/net/NET-50-193-49-32-1</netRef></nets>

Мне было интересно, можно ли отображать только все атрибуты endAddress и startAddress в PHP?

Я пробовал использовать модуль xml .etree.ElementTree, но потому что переменная запроса является «ответом» вместо «байта», я не могу проанализировать XML непосредственно в элемент.

Мой PHP код в настоящее время выглядит так, поскольку я не уверен, что делать дальше. testapi.py относится к приведенному выше коду python.

<?php

$output1 = shell_exec('python testapi.py');

echo $output1;
?>

Мой желаемый результат на стороне PHP выглядит следующим образом:

IP range: 173.8.217.96-173.8.217.111, 50.193.49.32-50.193.49.47

Я был бы рад за любую помощь, Спасибо.

1 Ответ

0 голосов
/ 07 августа 2020

Python s etree поддерживает метод fromstring для синтаксического анализа XML деревьев из текста. Оттуда вы можете анализировать контент и обязательно назначать префиксы пространству имен по умолчанию в XML:

xmlns="http://www.arin.net/whoisrws/core/v1"

import requests as rq
import xml.etree.ElementTree as ET

request = rq.get('http://whois.arin.net/rest/nets;name=logitech')

tree = ET.fromstring(request.text)

nmsp = {"doc": "http://www.arin.net/whoisrws/core/v1"}
for elem in tree.findall(".//doc:netRef", nmsp):
    print(f"endAddress: {elem.attrib['endAddress']}")
    print(f"startAddress: {elem.attrib['startAddress']}")
    print("---------------------------\n")

# endAddress: 173.8.217.111
# startAddress: 173.8.217.96
# ---------------------------

# endAddress: 50.193.49.47
# startAddress: 50.193.49.32
# ---------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...