Q. Как средствами XSLT разобрать строку, содержащую XML-дерево в текстовом виде? А [Anton Lapounov]. Стандартными средствами XSLT сделать это весьма сложно — для этого пришлось бы написать на XSLT полноценный XML-парсер. Однако задача легко решается расширениями языка. Например, для System.Xml можно использовать следующий скрипт: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="http://tempuri.org/user" > <xsl:output omit-xml-declaration="yes"/> <ms:script language="C#" implements-prefix="user"> // Разобрать XML и вернуть его корневой узёл. (C) Anton Lapounov 2005 public XPathNodeIterator ParseXml(string xml) { XmlDocument doc = new XmlDocument(); doc.Load(new System.IO.StringReader(xml)); return doc.CreateNavigator().Select("/"); } </ms:script> <!-- Переменная $xml содержит неразобранный XML --> <xsl:variable name="xml"> <![CDATA[ <family> <person name="Tanushka" birth-date="07/11/1977"/> <person name="Tihomir" birth-date="10/24/2000"/> <person name="Kirill" birth-date="11/29/2002"/> </family> ]]> </xsl:variable> <xsl:template match="/"> <!-- Разобрать XML и использовать его в XPath-выражении. Выводит 10/24/2000. --> <xsl:value-of select="user:ParseXml($xml)//person[@name='Tihomir']/@birth-date"/> </xsl:template> </xsl:stylesheet> |
© Vasil I. Yaroshevich, 2001-2005 Driven by DokuWiki © 2004-2005 Andreas Gohr |