E 'possibile utilizzare i caratteri jolly con i tag XInclude?
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.
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.