Итерируйте по потомкам и получите то, что вам нужно:
import xml.etree.ElementTree as et
doc = """
your doc
"""
root = et.fromstring(doc)
result = []
for shire in root:
for location in shire:
location_id = location.attrib.get('id')
for reference in location:
list_of_attribs = [reference.attrib.get(x) for x in filter_reference]
result.append((location_id, list_of_attribs))
print(result) # [('5178566', '978-1-891830-75-4', '110 Per¢'), ('5178566', '978-1-60309-2395', 'American Elf 1999'), ('5178566', '978-1-891830-37-2', 'The Barefoot Serpent (softcover)'), ('5178566', '978-1-891830-56-3', 'Bighead'), ('5178566', '978-1-891830-19-8', 'Box Office Poison'), ('5178568', '978-1-891830-37-2', 'The Barefoot Serpent (softcover)'), ('5178568', '978-1-936561-69-8', 'Chester 5000 (Book 2)'), ('5178568', '978-1-891830-81-5', 'Cry Yourself to Sleep'), ('5178568', '978-1-891830-75-4', '110 Per¢'), ('5178568', '978-1-891830-77-8', 'Every Girl is the End of the World for Me'), ('5178568', '978-0-9585783-4-9', 'From Hell')]
Хорошо. Итак, я провел несколько экспериментов, и оказалось, что нам действительно нужно написать код, чтобы он работал из-за прокси-сервера. (Хотя я бы предпочел лучшее решение)
Таким образом, он фактически детализирует запрос информации о прокси-сервере у пользователя, а затем конфигурирует служебный прокси-класс для прокси-сервера, как показано ниже:
var networkCredentials = new NetworkCredential ("username", "password", "domain"); WebProxy myProxy = new WebProxy ("W.X.Y.Z:NN", true) {Credentials = networkCredentials}; var service = new iptocountry { Proxy = myProxy }; string result = service.FindCountryAsString ("A.B.C.D");
Я написал тестовый класс, и он использует IP для страны бесплатная веб-служба.
Используя приведенный выше код, я мог успешно использовать веб-службу.
По умолчанию он будет использовать порт 80, и вам не нужно будет выполнять какое-либо дополнительное кодирование.
Если вам действительно нужно пройти через какой-то прокси-сервер, все, что вам нужно, do добавляет в ваш web.config следующее:
<system.net>
<defaultProxy>
<proxy proxyaddress="http://yourproxyserver:80" />
</defaultProxy>
</system.net>
Вы также можете сделать это с помощью кода, используя это:
WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true);
Все встроенные коды (WebClient, WCF, HttpWebRequest и т. Д.) Используют конфигурацию WinHTTP для получения конфигурации прокси. Итак, все, что вам нужно сделать, это настроить WinHTTP, чтобы знать о прокси!
В XP это:
proxycfg -u
, который импортирует настройки из пользовательских настроек прокси-сервера IE (WinInet).
В Vista и т. Д. Вы используйте
netsh winhttp
(и некоторую подкоманду вроде "import")
непроверено, но попробуйте:
netsh winhttp import proxy source=ie
После этого весь ваш код .NET должен работать через прокси, который, по-видимому, уже настроен для использования IE и т. д. .
Если ваш веб-сервис находится в той же внутренней сети, что и клиент, вызывающий веб-сервис, он не должен проходить через прокси.
Пока веб-трафик (порт 80) разрешен, вам не нужно делать ничего особенного. С точки зрения маршрутизатора / прокси-сервера вызовы веб-служб такие же, как и любой другой HTTP-трафик.