2010-12-09 13 views
2

Angesichts der folgenden xml:Saxon XPath-Namespace

<Document xmlns="urn:company.com:catalog.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <book> 
     <author>Wells</author> 
    </book> 
</Document> 

Mit Xerces die folgende XPath-Abfrage funktioniert:

//urn:company.com:catalog.01:author 

Wenn ich Saxon (v 8.7) I eine StaticError mit Meldung ‚Ungültige QName lokalen Teil {Firma.com: Katalog ...}.

Wie sollte die Xpath-Abfrage aussehen, um den Wert des Autors zu erhalten?

Antwort

0

Xerces sollten nicht einem XPath-Ausdruck wie

//urn:company.com:catalog.01:author 

XPath ist XML Name konform, so ein : (Kolon) in einem QName teilt der Präfix Teil von lokalem Namensteil eines QName ermöglichen.

Es gibt keine Syntax in XPath ist die vollständige erweiterte QName Namens Test zu verwenden:

Sie könnten

//*[local-name()='author'][namespace-uri()='urn:company.com:catalog.01'] 
+0

Also ist das xmlns überhaupt gültig? – fransvn

+0

@ drifwood: Ja, tatsächlich ist jeder String als Namespace-URI gültig, außerdem sollte es ein gültiger URI sein. –

+0

@Alejandro: Ich habe einige redaktionelle Bearbeitungen vorgenommen. Außerdem wird die Anforderung, dass ein Namespace ein gültiger URI sein muss, nicht strikt durchgesetzt - der Sprachprozessor erzeugt keinen Fehler, wenn ein Namespace kein gültiger URI ist. Daher ist dies keine Voraussetzung - nur eine Empfehlung. –

0

verwenden Sie nicht Ihre XSL-Datei veröffentlichen. Ich ging vor kurzem durch diese, und die Lösung wurde auf die XSL-Datei stellen Sie sicher, eine Zeile wie hat: Ihre Verweise auf Elemente in der XML-Datei

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="urn:company.com:catalog.01"> 

Dann mit dem Präfix „c:“:

//c:author 
+0

Leider wird es nicht in einer XSL-Datei verwendet. Ich verwende die XPath-API für die schnell konfigurierbare Klassifizierung von Nachrichten usw. Aber danke für die Info wird es in Zukunft nützlich sein. – fransvn