2013-08-14 3 views
0

У меня есть большой текстовый файл, который в каком-то момент выглядит следующим образом:группы, где текст() содержит ключевое слово

<w> 
    <randomnode> 
     <pa/> 
     <pa> 
      Keyword1 sometxt1 <thing>abc</thing>: blabla 
     </pa> 
     <stuff>abc</stuff> 
     <pa> 
      just blabla 
     </pa> 
     <pa> 
      Keyword2 othertxt2: blabla 
     </pa> 
     <pa> 
      just blabla 
     </pa> 
     <pa> 
      just blabla 
     </pa> 
     <pa> 
      Keyword1 xxx: and blabla 
     </pa> 
    </randomnode> 
</w> 

и хочу получить этот результат:

<w> 
    <randomnode> 
     <k attr="keyword1 sometxt1"> 
      <p> 
       <s> 
        Keyword1 sometxt1 <thing>abc</thing>: 
       </s> 
       blabla 
      </p> 
      <stuff>abc</stuff> 
      <p> 
       just blabla 
      </p> 
     </k> 
     <k attr="keyword1 othertxt2"> 
      <p> 
       <s> 
       Keyword2 othertxt2: 
       </s> 
       blabla 
      </p> 
      <p> 
       just blabla 
      </p> 
      <p> 
       just blabla 
      </p> 
     </k> 
     <k attr="keyword1 xxx"> 
      <p> 
       <s> 
        Keyword1 xxx: 
       </s> 
       and blabla 
      </p> 
     </k> 
    </randomnode> 
</w> 

На английском языке: I хотите пройти через каждый <pa> и группировать их всякий раз, когда в тексте() этого узла есть ключевое слово1 или ключевое слово2 или ключевое слово3. Разделение содержимого <s> на : выполняется в другом шаблоне и должно работать, как только я смогу правильно сгруппировать <pa>.

меня это до сих пор:

<xsl:for-each-group select="$randomnode/*[normalize-space(.)!='']" 
    group-starting-with="pa/text()[contains(., 'keyword1') 
    or contains(., 'keyword2') or contains(., 'keyword3')]"> 

Проблема IST, что ничего не выбрано, и я есть ощущение, что это из-за текста() ...

Могу ли я использовать группу starting- в тексте() вообще? Я действительно хотел бы использовать это и расширить/исправить его, прежде чем сделать что-то другое .. укомплектовать

ответ

0

Ну я бы угробить text() полностью и просто сравнить

<xsl:for-each-group select="$randomnode/*[normalize-space(.)!='']" 
    group-starting-with="pa[contains(., 'keyword1') 
    or contains(., 'keyword2') or contains(., 'keyword3')]"> 

Если вы хотите использовать text() дочерний узел то вам нужно

<xsl:for-each-group select="$randomnode/*[normalize-space(.)!='']" 
    group-starting-with="pa[text()[contains(., 'keyword1') 
    or contains(., 'keyword2') or contains(., 'keyword3')]]"> 
+0

Спасибо, теперь мне не нужно беспокоиться об этой части ... – Beehgr

Смежные вопросы