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>
 
  faq/system_xml_parse_xml.txt · Последние изменения: 2012/03/27 05:15
 
Нас поддерживают: Рейтинг@Mail.ruliveinternet.ru