Обнаженная теория об XML. DarkSergeant Спецвыпуск Xakep, номер #028, стр. 028-056-3 Возьмем простенький XML-документ: <Users> <User id=”1”> <Name>Вася</Name> <Role>программист</Role> <Role>дворник</Role> <Role>потребитель денег</Role> <Salary>200</Salary> </User> <User id=”2”> <Name>Михаил Петрович</Name> <Role>шеф</Role> <Role>раздатчик денег</Role> <Salary>2000</Salary> </User> <User id=”3”> <Name>Маня</Name> <Role>секретарша</Role> <Role>массажистка шефа</Role> <Role>потребитель денег</Role> <Salary>1000</Salary> </User> <User id=”4”> <Name>Юра</Name> <Role>программист</Role> <Role>потребитель денег</Role> <Salary>500</Salary> </User> </Users> и представим, что мы хотим узнать сколько получает массажистка шефа. Через XPath это делается в одну строчку: /Users/User[Role=”массажистка шефа”]/Salary. Или мы хотим узнать как зовут второго чела: /Users/User[1]/Name. Даже если мы хотим узнать сколько шеф должен платить сотрудникам, это все равно будет одна строчка: sum(/Users/User[Role=”потребитель денег”]/Salary). Как можно заметить формат XPath-а очень прост: указываем путь к интересующему нас элементу (также, как и в файловой системе), а в квадратных скобках указываем условие-фильтр. Обращаю твое внимание на то, что XPath выбирает все элементы, которые удовлетворяют данному условию. На запрос /Users/User[Salary<1000] мы получим 2 элемента полностью описывающих юзера: <User id=”1”> <Name>Вася</Name> <Role>программист</Role> <Role>дворник</Role> <Role>потребитель денег</Role> <Salary>200</Salary> </User> <User id=”4”> <Name>Юра</Name> <Role>программист</Role> <Role>потребитель денег</Role> <Salary>500</Salary> </User> Если бы мы уточнили запрос /Users/User[Salary<1000]/Name, то на выходе были бы не целые юзеры, а только их имена. <Name>Вася</Name> <Name>Юра</Name> Все вышеприведенные запросы начинались с корневого элемента, но если запрос начинается с двух слэшей, то ищутся элементы на произвольном уровне вложенности. Так запрос //Role вернет список всех обязанностей наших юзеров. XPath не производит оптимизации ответа, поэтому Role «программист» будет выведена 2 раза. В качестве домашнего задания напиши XPath-выражение, которое возвращает имя любовницы шефа. XSL – Расширяемый Язык Стиля Изначально XSL разрабатывался для преобразования XML-я в HTML, но сейчас XSL используется для произвольной трансформации одного XML-я в другой. XSL является XML-ным документом, корневой элемент которого должен быть xsl:stylesheet. Далее в этот корневой элемент вставляются шаблоны - <xsl:template match="//User"></xsl:template>, где в атрибуте match указывается XPath для каких элементов будет выполняться данный шаблон. Внутри элемента xsl:template пишется то, на что мы хотим заменить выбранные элементы. Например, следующий XSL: |