2017-04-12 4 views
0

Ich habe Probleme mit XPATH zu arbeiten und könnte einige Hinweise verwenden. Ich habe das w3schools-Tutorial benutzt - und es ist nicht fortgeschritten genug, um mir zu helfen herauszufinden, was ich falsch mache. (Ich erwarte, dass ich in Zukunft XPATH mehr verwenden muss - so würden auch Empfehlungen zu guten Tutorials oder Büchern geschätzt).XPATH: Anzahl Vorgängerelemente innerhalb der Vorfahrenknoten

Ich arbeite an einem Buch, das Listen mit optionalen Titeln hat. Wenn der listTitle verwendet wird, würde ich gerne eine Listennummer an den Titel anhängen, die das Kapitel und die Listennummer verkettet (basierend auf listTitle). Listen, die listTitle nicht enthalten, sollten den Listenzähler nicht erhöhen.

Hier ist ein Beispiel XML-Datei mit den gewünschten Ergebnissen gezeigt:

<chapter><title>Chapter 1></title> 
    <para>Para text.</para> 
    <ul><listTitle>List 1-1</listTitle> .... </ul> 

    <section><title>Section 1.1</title> 
    <ol> .... </ol> 
    <ol><listTitle>List 1-2</listTitle> ... </ol> 
    </section> 

    <ol><listTitle>List 1-3</listTitle> ... </ol> 
    <ul><listTitle>List 1-4</listTitle> ... </ul> 
</chapter> 

<chapter><title>Chapter 2></title> 
    <para>Para text.</para> 
    <ul><listTitle>List 2-1</listTitle> .... </ul> 

    <section><title>Section 2.1</title> 
    <ol> .... </ol> 
    <ol><listTitle>List 2-2</listTitle> ... </ol> 
    </section> 

    <ol><listTitle>List 2-3</listTitle> ... </ol> 
    <ul><listTitle>List 2-4</listTitle> ... </ul> 
</chapter> 

jedoch das tatsächliche Ergebnis etwas ändert. Meine listTitle-Zählung beginnt auf der Kapitel-Ebene nicht von vorne ... also zählen die listTitles weiter (das heißt, anstelle der Liste 2-1 erhalte ich die Liste 2-5). Ich kann einfach nicht herausfinden, wie man die Kapitel-Beziehung spezifiziert, um die Zählung auf der Kapitel-Ebene zurückzusetzen.

Mein XPATH:

'concat("List ",count(../preceding::chapter)+1," - ",(count(preceding::*:ol/*:listTitle) 
+ count(ancestor::*:ol/*:listTitle)+ count(preceding::*:ul/*:listTitle) 
+ count(ancestor::*:ul/*:listTitle))," ")' 
+0

Was Sie XPath-Verfahren? Verwenden Sie Xpath als Teil von XSLT? (Wenn ja, wäre ['xsl: number'] (https://www.w3.org/TR/xslt#number) sehr hilfreich.) –

+0

Hallo Daniel - danke für die Einsicht. Leider bin ich gezwungen, die Zählung in einer Funktion in einer CSS-Datei für meine Bereitstellung durchzuführen ... das ist ziemlich spezifisch und ist exklusiv für Oxygen XML Author. –

Antwort

0

Das Problem verursacht wurde, zumindest teilweise auf Xmlns Fragen.

Dieser Artikel geholfen Stackoverflow: XML element has namespace, my XPATH does not work

Der folgende Code die Zählung richtige Liste Titel lautet:

('concat("List ", count(preceding::chapter)+1,"-", for $i in 
count(preceding::chapter) return ((count(//parent::basicDocument// 
chapter[$i+1]//*[name() = "listTitle"] intersect preceding::*)) + 1)," ")' 
Verwandte Themen