Domanda

Ho paura che non è possibile, ma non ho trovato da nessuna parte si dice che sia impossibile sia.

mi piacerebbe includere una serie di file all'interno di un documento XML utilizzando i caratteri jolly. In questo modo:

<?xml version="1.0" encoding="utf-8"?>
<mydocument>
  <!-- ... -->
  <xi:include href="*include.xml"/>
</mydocument>

Lo so che non funziona, ma penso che esprime chiaramente le mie intenzioni. C'è un modo per raggiungere questo obiettivo?

Modifica

Ho cercato di usare l'attributo xpointer, ma non sono riuscito a farlo funzionare.

È stato utile?

Soluzione

E 'possibile utilizzare i caratteri jolly con i tag XInclude?

No. Il href denota un URI, e queste non hanno un concetto di caratteri jolly.

In caso contrario, sarebbe possibile per rispecchiare la home page di Google dicendo qualcosa come href="http://www.google.com/*".

Suggerimento: I file system, inoltre, non hanno alcun concetto di jolly. Conchiglie fanno. Fanno il lavoro pesante di riempire gli spazi vuoti per voi quando si analizzano un percorso e vedono un *. Il file system sottostante non viene mai a vedere l'asterisco.

Altri suggerimenti

C'è un breve un'opzione

Override XmlResolver per creare un Resolver Consapevole jolly:

class WildCardResolver : XmlUrlResolver
{
    public override Uri ResolveUri(Uri baseUri, string relativeUri)
    {
        try
        {
            DirectoryInfo di = new DirectoryInfo(baseUri.AbsolutePath); // TODO Check it is valid.
            string combinedFilePath = Path.GetTempFileName();
            using (FileStream combinedStream = new FileStream(combinedFilePath, FileMode.OpenOrCreate))
            {
                foreach (FileInfo fi in di.GetFiles(relativeUri))
                {
                    using (FileStream fileStream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read))
                    {
                        fileStream.CopyTo(combinedStream);
                    }
                }
            }
            Uri absUri = new Uri(combinedFilePath);
            return absUri;
        }
        catch(Exception ex)
        {
            //Log Exception
            return base.ResolveUri(baseUri, relativeUri);
        }
    }
}

C'è molto da fare per preavviso se jolly sono applicabili a tutti

Inoltre, il BaseURI può essere perché ingannevole diciamo il codice XML di origine è da

file: // c: /myXMLRepository/myXML.xml

include * inc.xml

Ora l'URI di base è il file // c: /temp/tmpA0.tmp

.

.

si desidera buona fortuna,

EDIT:

C'è un altro modo per ignorare

public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)

, ma ci sono altri problemi imposte dal ... perché l'URI assoluto non sarà sempre valida, e la prova XIncludingReader e verificare esso.

@Tomalek è assolutamente proprio qui. Ci sono modi per fare quello che stai cercando di fare, ma XInclude non è la risposta giusta. Avete intenzione di bisogno di una sorta di strumento in grado di gestire l'espansione jolly per voi.

Si può quasi certamente fare questo con qualcosa di simile a Norm Walsh XProc implementazione - calabash ma si avrebbe bisogno di rotolo il proprio equivalente a XInclude in qualche modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top