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.

 22
Author: Jookia, 2011-01-16

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.

 33
Author: Dimitre Novatchev,
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.

 5
Author: Mads Hansen,
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.

 1
Author: PaulMurrayCbr,
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.

 1
Author: Cody,
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ą.

 0
Author: Yzmir Ramirez,
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