Как работает функция document () в XSLT? - PullRequest
0 голосов
/ 11 апреля 2020

так что, в основном, я рвал на себе волосы, пытаясь заставить функцию document () работать в xslt, однако я не могу найти способ для своей жизни. Мне сказали изучать его в Notepad ++ с помощью плагина XMLTools и преобразования xml.

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

Мои первые xml названные автомобили. xml:

<?xml version="1.0"?>
<!DOCTYPE cars SYSTEM "cars.dtd">
<cars>
    <car>
        <carManufacturer>BMW</carManufacturer>
        <carModel>1 Series</carModel>
        <carYear>2013</carYear>
        <carPrice>£7,950</carPrice>
    </car>
    <car>
        <carManufacturer>BMW</carManufacturer>
        <carModel>3 Series</carModel>
        <carYear>2014</carYear>
        <carPrice>£9,950</carPrice>
    </car>
</cars>

И мой второй xml файл с именем клиенты . xml:

<?xml version="1.0"?>
<!DOCTYPE customers SYSTEM "cars.dtd">
<customers>
    <customer>
        <firstName>John</firstName>
        <lastName>Smith</lastName>
        <location>Carterton</location>
    </customer>
    <customer>
        <firstName>Jeremy</firstName>
        <lastName>Clarkson</lastName>
        <location>Chipping Norton</location>
    </customer>
</customers>

Это то, что я придумал в моем xsl soo далеко, но я не получил, где:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" indent="no"/>
    <xsl:template match="/">
        <xsl:call-template name="StartHTML">
            <xsl:with-param name="Title" select="'Cars'"/>
        </xsl:call-template>
    </xsl:template>
    <!--<xsl:template match="cars">
        <xsl:variable name="CarName">
            <xsl:value-of select="car/carManufacturer"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="car/carModel"/>
        </xsl:variable>

    </xsl:template>-->
</xsl:stylesheet>

Любая помощь вообще с использованием этой функции будет принята с благодарностью:)

1 Ответ

0 голосов
/ 14 апреля 2020

Из вашего вопроса не ясно, как связаны ваши два файла ...

Функцию документа можно просто использовать так:

<xsl:variable name="carsFile" select="document('cars.xsml')"/>

А затем, например, можно использовать как в:

<xsl:value-of select="$carsFile/cars/car/carManufacturer"/>

Также, если у вас нет доступа к среде разработки XML / XSLT (XMLSpy, Oxygen XML, ...), которая является дорогой для пользователей, которым они не нужны часто, по моему опыту, с плагином XMLTools в Notepad ++ было трудно работать, а сообщения об ошибках не всегда легко декодировать.

Я бы посоветовал вам продолжать редактировать XSLT в Notepad ++ и иметь простой пакетный файл, из которого вы можете запустите Saxon для ваших файлов, примерно так:

java -cp saxon9he.jar net.sf.saxon.Transform -t -s:input.xml -xsl:transform.xsl -o:output.xml
...