Condividi tramite


Funzione document

Consente di recuperare altre risorse XML dal foglio di stile XSLT oltre la data iniziale fornita dal flusso di input.

node-set document(object, node-set?)

Note

Gli effetti della funzione document() variano a seconda del tipo e del numero di argomenti forniti.

  • Se viene fornito un solo argomento e tale argomento corrisponde a una stringa, la funzione document() considera la stringa come un URL e recupera il documento come un set di nodi. Vedere l'Esempio 1 di seguito per una spiegazione del codice.

  • Se viene fornito un solo argomento e tale argomento corrisponde a un set di nodi, ciascun nodo presente nel set di nodi verrà considerato come un URL e la funzione restituirà l'unione di tutti i documenti a cui è stato fatto riferimento. Vedere l'Esempio 2 di seguito per una spiegazione del codice.

  • Se sono presenti due argomenti, il primo argomento può essere una stringa o un set di nodi, mentre il secondo deve essere un set di nodi. Il secondo argomento, se fornito, consente di indicare l'URL di base a cui fa riferimento il contenuto del primo argomento. Vedere l'Esempio 3 di seguito per una spiegazione del codice.

  • Se alla funzione document() viene passata una stringa vuota, il risultato sarà l'XML di origine del documento XSLT stesso, a meno che non venga specificato il secondo argomento con un valore diverso da null. In quest'ultimo caso, l'URL del documento è l'URL di base del nodo contenuto nel secondo elemento.

Se si scarica un documento XML da una pagina ASP usando la funzione document() e un URL assoluto come argomento, prima di avviare qualsiasi trasformazione, è necessario che la proprietà ServerHTTPRequest sia impostata su true nell'oggetto DOM contenente il foglio di stile XSLT, come indicato nel seguente frammento di codice JScript:

xsltDom.setProperty("ServerHTTPRequest", true);

Ciò è dovuto al fatto che MSXML usa il file URLMON.dll come file predefinito per supportare il download dei file, mentre ASP non supporta URLMON. Pertanto è necessario impostare questa proprietà in modo tale che per i download venga usato il file WinHTTP.dll.

Esempio 1

In questo esempio il foglio di stile XSLT (document.xsl) esegue i seguenti passaggi:

  1. Usa la funzione document() per scaricare due documenti XML (hrGroup.xml e myGroup.xml) a cui viene fatto riferimento nel documento XML di origine (document.xml).

  2. Estrae gli elementi <group> dai documenti scaricati.

  3. Inserisce gli elementi estratti nel documento XML risultante.

L'effetto della trasformazione è quello di risolvere i riferimenti presenti nel file document.xml. Se si usa un percorso relativo per fare riferimento a un documento XML esterno, l'URL di base è uguale a quello del foglio di stile XSLT.

Se la trasformazione è avviata da uno script di una pagina ASP (document.asp), la proprietà ServerHTTPRequest deve essere impostata su true. Ciò non è necessario se la trasformazione viene avviata in JScript (document.js) ed eseguita all'interno di Windows Scripting Host o di una pagina HTML. Viene usato Windows Script Host.

ms256465.collapse_all(it-it,VS.120).gifFile XML (document.xml)

<?xml version='1.0'?>
<groups>
   <groupRef href="https://localhost/hr/hrGroup.xml"/>
   <groupRef href="myGroup.xml"/>
</groups>

ms256465.collapse_all(it-it,VS.120).gifFile XML 1 a cui è stato fatto riferimento (hrGroup.xml)

<?xml version='1.0'?>
<group name="hr">
  <leader>mo</leader>
  <member>bo</member>
  <member>ko</member>
  <member>lo</member>
</group>

ms256465.collapse_all(it-it,VS.120).gifFile XML 2 a cui è stato fatto riferimento (myGroup.xml)

<?xml version='1.0'?>
<group name="my">
  <leader>john</leader>
  <member>jane</member>
  <member>jon</member>
  <member>jan</member>
</group>

ms256465.collapse_all(it-it,VS.120).gifFile XSLT (document.xsl)

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

<xsl:template match="/">
    <groups>
        <xsl:apply-templates select="//groupRef"/>
    </groups>
</xsl:template>

<xsl:template match="groupRef">
    <xsl:copy-of select="document(@href)//group"/>
</xsl:template>

</xsl:stylesheet>

ms256465.collapse_all(it-it,VS.120).gifFile ASP (document.asp)

<%@ LANGUAGE = JScript %>
<%
  // Set the source and style sheet locations here.
  var sourceFile = Server.MapPath("document.xml");
  var styleFile = Server.MapPath("document.xsl");

  // Load the XML.
  var source = Server.CreateObject("Msxml2.DOMDocument.6.0");
  source.setProperty("AllowDocumentFunction", true);
  source.async = false;
  source.load(sourceFile);

  // Load the XSLT.
  var style = Server.CreateObject("Msxml2.DOMDocument.6.0");
  style.setProperty("AllowDocumentFunction", true);
  style.async = false;
  style.setProperty("ServerHTTPRequest", true);
  style.load(styleFile);

  Response.Write(source.transformNode(style));
%>

ms256465.collapse_all(it-it,VS.120).gifFile JScript (document.js)

// Set the source and style sheet locations here.
  var sourceFile = ("document.xml");
  var styleFile = ("document.xsl");

  // Load the XML.
  var source = new ActiveXObject("Msxml2.DOMDocument.6.0");
  source.setProperty("AllowDocumentFunction", true);
  source.async = false;
  source.load(sourceFile);

  // Load the XSLT.
  var style =new ActiveXObject("Msxml2.DOMDocument.6.0");
  style.setProperty("AllowDocumentFunction", true);
  style.async = false;
  style.load(styleFile);

  WScript.Echo(source.transformNode(style));

Prova

  1. Copiare gli esempi di codice precedenti e incollarli nei file dell'unità locale.

  2. Salvare i file con i nomi e le estensioni forniti.

  3. Creare una nuova directory virtuale, a cui è associato l'alias hr, nel sito Web predefinito del computer locale. Se si usa un computer remoto come server Web, impostare localhost sul nome host del server Web nel valore dell'attributo href nel file document.xml. Se si usa una directory virtuale esistente, impostare hr sull'alias della directory nello stesso valore dell'attributo href. Spostare il file hrGroup.xml nella directory che viene usata come directory virtuale del server Web.

  4. Nella finestra del browser Internet Explorer aprire la pagina ASP con il seguente URL:

    https://localhost/hr/document.asp

  5. Eseguire il file JScript usando il seguente comando di Windows Scripting Host:

cscript document.js

ms256465.collapse_all(it-it,VS.120).gifOutput

Di seguito è indicato l'output del processore. Per maggiore chiarezza è stato aggiunto un rientro.

<?xml version="1.0"?>
<groups>
  <group name="hr">
    <leader>mo</leader>
    <member>bo</member>
    <member>ko</member>
    <member>lo</member>
  </group>
  <group name="my">
    <leader>john</leader>
    <member>jane</member>
    <member>jon</member>
    <member>jan</member>
  </group>
</groups>

Esempio 2

In questo esempio sono illustrati gli effetti dovuti all'utilizzo di un set di nodi come argomento per la funzione document.

ms256465.collapse_all(it-it,VS.120).gifFile XML (document1.xml)

<?xml version='1.0' encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="document1.xsl" ?>
<groups>
   <groupRef>hrGroup.xml</groupRef>
   <groupRef>myGroup.xml</groupRef>
</groups>

ms256465.collapse_all(it-it,VS.120).gifFoglio di stile XSLT (document1.xsl)

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

<xsl:output method="xml" 
            version="1.0" 
            encoding="UTF-8" 
            indent="yes"/>

<xsl:template match="/">
    <groups>
        <xsl:apply-templates select="/groups/groupRef"/>
    </groups>
</xsl:template>

<xsl:template match="groups/groupRef">
    <xsl:copy-of select="document(.)//group"/>
</xsl:template>

</xsl:stylesheet>

Prova

  1. Se questa operazione non è già stata eseguita, scaricare il file msxsl.exe dalla pagina Web msdn.microsoft.com.

  2. Al prompt dei comandi, digitare il seguente comando dalla directory in cui sono stati salvati i file document1.xml e document1.xsl:

msxsl document1.xml document1.xsl

ms256465.collapse_all(it-it,VS.120).gifOutput

L'output è simile a quello prodotto nell'Esempio 1 precedente.

Esempio 3

In questo esempio viene illustrato l'effetto generato dall'utilizzo di due argomenti quando viene chiamata la funzione document. Il secondo argomento, che deve essere un set di nodi, viene usato come URL di base per il primo argomento. Se il secondo argomento non è presente, l'URL di base del primo argomento sarà l'URL di base del file XSLT.

ms256465.collapse_all(it-it,VS.120).gifFoglio di stile XSLT (document2.xsl)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/">
    <root>
        <xsl:comment>One Argument </xsl:comment>
        <xsl:for-each select="document('b.xml')//a">
            <xsl:copy-of select="."/>
        </xsl:for-each>

        <xsl:comment>Two Argument </xsl:comment>
        <xsl:for-each select="document('a.xml', .)//a">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </root>
    </xsl:template>
</xsl:stylesheet>

ms256465.collapse_all(it-it,VS.120).gifFile XML 1 (b.xml)

<doc>
 <a> one </a>
 <a> two </a>
 <a> three </a>
</doc>

ms256465.collapse_all(it-it,VS.120).gifFile XML 2 (subDir/a.xml)

<doc>
 <a> I </a>
 <a> II </a>
 <a> III </a>
</doc>

Prova

  1. Salvare i file document2.xsl e b.xml in una cartella di lavoro.

  2. Al prompt dei comandi, digitare il seguente comando nella cartella di lavoro:

msxsl.exe a.xml document2.xsl

ms256465.collapse_all(it-it,VS.120).gifOutput

<?xml version="1.0" encoding="UTF-8"?>
<root>
<!-- One Argument >
<a> one </a>
<a> two </a>
<a> three </a>
<!-- Two Arguments >
<a> I </a>
<a> II </a>
<a> III </a>
</root>

Vedere anche

Riferimenti

Elemento <xsl:copy-of>