2010-12-20 13 views
1

Ich fürchte, es ist nicht möglich, aber habe nirgendwo gefunden, dass es auch unmöglich sein soll.Ist es möglich, Wildcards mit XInclude Tags zu verwenden?

Ich möchte eine Reihe von Dateien in einem XML-Dokument mit Wildcards enthalten. Wie folgt aus:

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

weiß, dass ich es nicht funktioniert, aber ich denke, es ist meine Absicht klar zum Ausdruck bringt. Gibt es einen Weg, dies zu erreichen?

Edit:

Ich versuchte xpointer Attribut zu verwenden, aber konnte es nicht funktioniert.

Antwort

3

Ist es möglich, Wildcards mit XInclude Tags zu verwenden?

Nein. Die href bezeichnet einen URI, und diese haben kein Konzept von Platzhaltern.

Andernfalls wäre es möglich, die Google-Startseite mit etwas wie href="http://www.google.com/*" zu spiegeln.

Hinweis: Dateisysteme haben auch kein Konzept von Platzhaltern. Muscheln tun. Sie tun das schwere Heben von Füllen Sie die Lücken für Sie, wenn sie einen Pfad analysieren und eine * sehen. Das zugrunde liegende Dateisystem wird nie den Stern sehen.

0

@Tomalek ist absolut richtig hier. Es gibt Möglichkeiten zu tun, was Sie versuchen, aber XInclude ist nicht die richtige Antwort. Sie werden eine Art von Tool benötigen, das die Wildcard-Erweiterung für Sie handhaben kann.

Sie können fast sicher dies mit etwas wie Norm Walsh XProc implementation - calabash tun, aber Sie müssten Ihr eigenes Äquivalent zu XInclude in irgendeiner Weise rollen.

1

gibt es eine schnelle Option

Aufschalten XmlResolver eine Wildcard Aware Resolver zu erstellen:

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

Es gibt viel zu tun, wenn Wildcards zu bemerken bei allen

, Zusätzlich gelten die BaseURI kann schwierig sein, sagen wir mal, die Quell-XML stammt von

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

enthält * inc.xml

nun die Basis-URI-Datei // c: /temp/tmpA0.tmp

.

.

wünschen Ihnen viel Glück,

EDIT:

Theres eine andere Art und Weise

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

aber es gibt anderes Problem, dass auferlegt außer Kraft zu setzen ... da die URI Absolute wird nicht immer gültig sein, und der XIncludingReader versucht es und verifiziert es.

Verwandte Themen