Pregunta

Me temo que no es posible, pero no he encontrado en cualquier lugar que se dice que es imposible tampoco.

Me gustaría incluir un conjunto de archivos dentro de un documento XML utilizando comodines. De esta manera:

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

Sé que no funciona, pero creo que expresa claramente mis intenciones. ¿Hay una manera de lograr esto?

Editar

He intentado utilizar el atributo xpointer, pero no podía hacer que funcione.

¿Fue útil?

Solución

Es posible el uso de comodines con las etiquetas XInclude?

No. El href denota un URI, y éstos no tienen un concepto de comodines.

De otra manera sería posible reflejar la página principal de Google diciendo algo como href="http://www.google.com/*".

Sugerencia: Los sistemas de archivos no también no tiene ningún concepto de comodines. Conchas lo hacen. Ellos hacen el trabajo pesado de llenar los espacios en blanco para que cuando se analizan un camino y ver una *. El sistema de archivos subyacente nunca llega a ver el asterisco.

Otros consejos

Hay una opción rápida

XmlResolver Anular para crear un dispositivo de resolución Consciente Comodín:

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

Hay mucho que hacer para aviso si comodines son aplicables en todas

Además, el baseURI puede ser complicado, porque digamos que el origen de XML es de

file: // C: /myXMLRepository/myXML.xml

incluye * inc.xml

Ahora el URI base es el archivo // c: /temp/tmpA0.tmp

.

.

te deseo buena suerte,

EDIT:

Theres otra manera de anular

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

pero hay otro problema impuesto por eso ... porque el URI absoluto no siempre será válida, y el intento XIncludingReader y verificarlo.

@Tomalek tiene toda la razón aquí. Hay maneras de hacer lo que estás tratando de hacer, pero XInclude no es la respuesta correcta. Usted va a necesitar algún tipo de herramienta que puede manejar la expansión de comodines para usted.

es casi seguro que se puede hacer esto con algo como de Norm Walsh XProc aplicación - calabaza pero se necesitaría rollo su propio equivalente a XInclude de alguna manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top