Dołączanie pliku XML do pliku XML/XSL
Więc obecnie robię trochę pracy XML -> XSLT - > (HTML5/CSS3). Teraz mam menu.plik xml, I chciałbym umieścić go w pliku XSL lub na stronie XML. Szukałem wiele, ale nie jestem w stanie znaleźć prostej odpowiedzi.
Więc, jak dołączyć plik XML do innego pliku XML lub do pliku XSL?
Edit: przez include, mam na myśli odwołanie/ładowanie go z innego pliku, a nie kopiowanie i wklejanie go lub po prostu osadzanie go.
5 answers
I. oto jak dowolny dokument XML lub fragment może być osadzony w arkuszu stylów XSLT i użyty podczas transformacji :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:menu>
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
</my:menu>
<xsl:template match="/">
<xsl:copy-of select="document('')/*/my:menu/*"/>
</xsl:template>
</xsl:stylesheet>
Gdy transformacja ta zostanie zastosowana w dowolnym dokumencie XML (nieużywanym w tym przykładzie), otrzymany zostanie pożądany wynik (wystarczy skopiować XML) :
<menu xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
Zapamiętaj: dowolny XML może być osadzony w arkuszu stylów XSLT, pod warunkiem, że jest zawinięty w element przestrzeni nazw (przestrzeń nazw nie XSLT) i to zawinięcie element jest na poziomie globalnym (potomkiem elementu <xsl:stylesheet>
(top)).
II. dostęp do pliku menu XML, który znajduje się w oddzielnym pliku XML :
Aby to zrobić musimy tylko nieznacznie zmienić poprzedni przykład:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="document('menu.XML')/*"/>
</xsl:template>
</xsl:stylesheet>
Jeśli plik XML menu znajduje się w pliku 'menu.XML'
(w tym samym katalogu co plik arkusza stylów XSLT, wtedy ta transformacja daje dokładnie taki sam wynik jak poprzedni:
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
Uwaga: w obu przypadkach jesteśmy korzystanie ze standardowej funkcji XSLTdocument()
Zazwyczaj definiuje się zmienną globalną, której wartość jest wynikiem wywołania funkcji document()
. Wtedy ta zmienna i jej zawartość jest dostępna za pomocą wyrażeń XPath podczas transformacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-16 16:06:18
Więc jak załączyć plik XML do inny plik XML czy w pliku XSL?
Możesz użyć zewnętrznego bytu aby odwołać się do menu .plik XML i dołącz zawartość do pliku XML lub XSLT (lub obu).
Przez include, mam na myśli referowanie/Ładowanie to z innego pliku, nie kopiuje i wklejanie go lub po prostu osadzanie go.
Za pomocą zewnętrznych encji, można odwołać / załadować menu.zawartość xml z plików zewnętrznych i nie muszą powielać zawartości XML.
Na przykład, jeśli chcesz menu.zawartość xml zawarta w XSLT, Można zadeklarować zewnętrzny encja w XSLT w następujący sposób:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY menu SYSTEM "./menu.xml">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
I mógłby się wtedy odwoływać do niego jak do każdej innej istoty:
&menu;
Po przetworzeniu XSLT, odniesienie do encji zostanie rozszerzone i zawartość XML w menu.xml zostanie dołączony jako część dokumentu XSLT tak, jakbyś miał skopiuj / wklej do miejsca, w którym znajdowało się odniesienie do podmiotu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-16 15:17:42
Mam wpis na blogu na ten temat. Używasz metody document (), aby uzyskać inny XML i przekazać zawartość za pomocą parametrów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 10:32:20
Nie byłem w stanie uruchomić kodu, który ludzie dostarczyli. Jednak dostałem rozwiązanie po wypróbowaniu kilku rzeczy. Nazwa pliku XML clGroup.xml (pierwsze dwie litery nie mają znaczenia, ale uważam ,że" grupa " jest wymagana. Ten plik xml będzie odwoływał się do xml, który chcesz przeanalizować.
ClGroup xml:
<?xml version='1.0' encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="calendarGroup.xslt" ?>
<groups>
<groupRef>caGroup.xml</groupRef>
</groups>
Teraz nazwij plik caGroup.xml i umieścić w następującym kodzie:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<topics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<topic>
<topicstopic>Calendar</topicstopic>
<topicsubmitter>Calendar</topicsubmitter>
<creatoremail>[email protected]</creatoremail>
</topic>
<topic>
<name>Week1</name>
<sunday/>
<monday/>
<tuesday>Test01 Young Men Weekly</tuesday>
<wednesday>02 Elders Home Teaching Message Birthday</wednesday>
<thursday>03 </thursday>
<friday>04 </friday>
<saturday>05 #Young Men Weekly</saturday>
</topic>
<topic>
<name>Week2</name>
<sunday>06 Fast Sunday</sunday>
<monday>07 FHE</monday>
<tuesday>08 Young Men Tonight #Young Men Weekly going to Bishops storehouse 6PM to 7PM Young Men Weekly</tuesday>
<wednesday>09 </wednesday>
<thursday>10 Scout Round Table at 7 PM </thursday>
<friday>11 </friday>
<saturday>12 </saturday>
</topic>
</topics>
Oto mój kalendarz plików XSLT.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
version="1.0"
encoding="UTF-8"
indent="yes"/>
<xsl:template match="groups/groupRef">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Table</title>
<meta charset="utf-8" />
</head>
<body>
<table border="1">
<tr>
<th>Sunday</th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
</tr>
<xsl:for-each select="document(.)//topic">
<xsl:if test="string(name) != ''">
<tr>
<td>
<xsl:value-of select="sunday"/>
</td>
<td>
<xsl:value-of select="monday"/>
</td>
<td>
<xsl:value-of select="tuesday"/>
</td>
<td>
<xsl:value-of select="wednesday"/>
</td>
<td>
<xsl:value-of select="thursday"/>
</td>
<td>
<xsl:value-of select="friday"/>
</td>
<td>
<xsl:value-of select="saturday"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Korzyści z ustawienia mojego kodu w ten sposób mogę łatwo utworzyć xml z pliku excel, a nie połowę, aby umieścić w deklaracji w nowo utworzonym pliku. Musisz mieć format "xxGroup", aby to działało razem. Możesz dodać więcej grup do pliku clGroup i będą one analizowane w XSLT, co pozwala na włączenie więcej xml w tym samym parserze XSLT. Upewnij się, że wszystkie są w tym samym katalogu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-04 21:02:53
Jeśli zwykłe osadzenie pliku w pliku XML nie jest rozwiązaniem, należy dodać pole url, które odczytuje program interpretujący - w zasadzie prosisz o odpowiednik include (menu.xml) lub require (xml), ale w pliku XML.
Więc skoro piszesz program, który odczytuje plik, możesz dodać znacznik <externalMenuTagThatYouDecideToAddToTheBaseXmlFile>
lub jak chcesz go nazwać, że przeczytasz i wstawisz menu.XML ' s root note the place of the <externalMenuTagThatYouDecideToAddToTheBaseXmlFile>
.
Powodzenia i niech twój programy zawsze się kompilują.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-16 02:20:57