2017-11-09 7 views
0

DTDを持つ特定のものの前にすべての要素:XPathを使用しカウントXPathとDTD

<!ELEMENT PLAY (TITLE, FM, PERSONAE, SCNDESCR, PLAYSUBT, INDUCT?, PROLOGUE?, ACT+, EPILOGUE?)> 
<!ELEMENT FM (P+)> 
<!ELEMENT PERSONAE (TITLE, (PERSONA | PGROUP)+)> 
<!ELEMENT PGROUP (PERSONA+, GRPDESCR)> 
<!ELEMENT INDUCT (TITLE, SUBTITLE*, (SCENE+|(SPEECH|STAGEDIR|SUBHEAD)+))> 
<!ELEMENT ACT (TITLE, SUBTITLE*, PROLOGUE?, SCENE+, EPILOGUE?)> 
<!ELEMENT SCENE (TITLE, SUBTITLE*, (SPEECH | STAGEDIR | SUBHEAD)+)> 
<!ELEMENT PROLOGUE (TITLE, SUBTITLE*, (STAGEDIR | SPEECH)+)> 
<!ELEMENT EPILOGUE (TITLE, SUBTITLE*, (STAGEDIR | SPEECH)+)> 
<!ELEMENT SPEECH (SPEAKER+, (LINE | STAGEDIR | SUBHEAD)+)> 
<!ELEMENT LINE (#PCDATA | STAGEDIR)*> 

は、私は彼が「であるために、またはではない」と言う前に、すべてのハムレットのスピーチをカウントする必要があります。ハムレットはSPEAKERタグの下にあり、スピーチはSPEECHタグの下にあり、彼はLINEタグの下にあると言います。

/PLAY/ACT/SCENE/SPEECH[contains(LINE, 'To be')][contains(SPEAKER, 'HAMLET')] 

答えて

0
count(/PLAY/ACT/SCENE/SPEECH[contains(LINE, 'To be')][contains(SPEAKER, 'HAMLET')]/preceding::SPEECH[contains(SPEAKER, 'HAMLET')]) + 1 

私はこのようなXPathを使用して、正確なスピーチを取得するには