Question

Je crains que ce n'est pas possible, mais ne l'ai pas trouvé partout où il est dit impossible non plus.

Je voudrais inclure un ensemble de fichiers dans un document XML à l'aide des caractères génériques. Comme ceci:

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

Je sais que cela ne fonctionne pas, mais je pense qu'il exprime clairement mes intentions. Y at-il un moyen d'y parvenir?

Modifier

J'ai essayé d'utiliser l'attribut xpointer, mais n'a pas pu le faire fonctionner.

Était-ce utile?

La solution

  

Est-il possible d'utiliser des caractères génériques avec des balises XInclude?

Non

. Le href désigne un URI, et ceux-ci ne dispose pas d'un concept de caractères génériques.

Dans le cas contraire, il serait possible de refléter la page d'accueil Google en disant quelque chose comme href="http://www.google.com/*".

Conseil: Les systèmes de fichiers ne aussi pas de concept de jokers. Coquilles faire. Ils font la levée de lourdes de remplir les blancs pour vous quand ils analysent un chemin et voir un *. Le système de fichiers sous-jacent ne fait jamais voir l'astérisque.

Autres conseils

Il y a une option rapide

Remplacer XmlResolver pour créer un résolveur Conscient Wildcard:

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);
        }
    }
}

Il y a beaucoup de choses à faire pour avis si Wildcards sont applicables à tout

En outre, le baseURI peut être parce que délicate permet de dire que la source XML est de

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

* comprend inc.xml

l'URI de base est un fichier // c: /temp/tmpA0.tmp

.

.

vous souhaite bonne chance,

EDIT:

Theres une autre façon de remplacer

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

mais il y a un autre problème imposé par cette ... parce que l'URI absolu ne sera pas toujours valide, et l'essai de XIncludingReader et le vérifier.

@Tomalek est tout à fait ici. Il y a plusieurs façons de faire ce que vous essayez de faire, mais XInclude n'est pas la bonne réponse. Vous allez avoir besoin d'une sorte d'outil qui peut gérer l'expansion wildcard pour vous.

Vous pouvez certainement le faire avec quelque chose comme Norm Walsh XProc mise en œuvre - calebasses mais vous devez rouler votre propre équivalent à XInclude en quelque sorte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top