he estado teniendo este problema durante el uso de Xalan-c
El bit que no entendí al principio es que los alias/prefijos del espacio de nombres XPath o XSLT pueden ser diferentes a los del documento, dependiendo de la resolución del espacio de nombres.
Parece que si hay un espacio de nombres en el documento, no puede coincidir con un elemento de ruta a menos que se use un espacio de nombres. (estándar pero no siempre seguido?)
El XalanDocumentPrefixResolver asignará XPath o XSLT espacios de nombres de URI y tratar de darles Identificación por conseguir el prefijo - donde no hay prefijo se utiliza el nombre que se convirtió en xmlns
/xmlns:List/xmlns:Fields/xmlns:Field
alternativa, podría crear su propia resolución, pero todavía requiere un mínimo de un espacio de nombres utilizado en el XPath :(
Aquí es uno Pirateé juntos durante la prueba, no hay garantía de la memoria
// don't care what prefix given, there can only be the one
struct NoPrefixResolver : public xalanc::PrefixResolver {
NoPrefixResolver(const xalanc::XalanDOMString& theURI) : m_uri(theURI){}
virtual const xalanc::XalanDOMString*
getNamespaceForPrefix(const xalanc::XalanDOMString& prefix) const {
return &m_uri;
}
virtual const xalanc::XalanDOMString& getURI() const {
return m_uri;
}
const xalanc::XalanDOMString m_uri;
};
/x:List/x:Fields/x:Field
/a:List/b:Fields/c:Field
Uno de los muchos duplicados: http://stackoverflow.com/questions/11345/xpaths-and-default-namespaces –
No, eso no es un duplicado. Esa pregunta especifica C# mientras esto es estrictamente xpath/xml. Además, su espacio de nombres no está en blanco, mientras que el mío sí. –
Necesita un cierto nivel de abstracción ... Está preguntando cómo seleccionar elementos en el espacio de nombres predeterminado con una expresión XPath. ** Esta es la mayoría de las preguntas frecuentes **. –