2013-06-13 3 views
0

Я ПОЛУЧАТЬ некоторые XML, как это:Удаление XML повторен теги

<cite id="0ac50429-bfbd-74e5-81bf-be29583cba3b"> 
<cite id="0ac50429-bfbd-74e5-81bf-be2a36aec2df"> 
<cite id="0ac50429-bfbd-74e5-81bf-be3d125bdc1c">Some Text 
</cite> 
</cite> 
</cite> 
<p>random text</p> 
<cite id="0ac50429-bfbd-74e5-81bf-be29583cba3b"> 
<cite id="0ac50429-bfbd-74e5-81bf-be2a36aec2df"> 
<cite id="0ac50429-bfbd-74e5-81bf-be3d125bdc1c"> 
More text 
</cite> 
</cite> 
</cite> 

Как вы видите, у меня более чем 1 тег для того же значения, и мне просто нужно только 1 тег каждого текста:

<cite id="0ac50429-bfbd-74e5-81bf-be3d125bdc1c">Some Text</cite> 
<p>random text</p> 
<cite id="0ac50429-bfbd-74e5-81bf-be29583cba3b">More text</cite> 

Но я не могу найти хороший способ избавиться от этого. Кто-нибудь знает? Я пытался получить последнего ребенка, но я просто не могу получить их. Я пробовал с регулярным выражением, я могу получить последний узел, но я не могу их правильно заменить, чтобы получить желание xml. Ty!

Это мое решение (я не могу anwser свой вопрос, поэтому я пишу здесь вместо :)

Я знаю, что это не самое лучшее и может быть сделано лучше, если она работает.

private static String replaceNodes(String simpleRegex, String xml) 
{ 

    String tagMultiple; 
    String expresionRegular = "("+simpleRegex+")+"; 

    Pattern pattern = Pattern.compile(expresionRegular); 
    Matcher matcher = pattern.matcher(xml); 


    while(matcher.find()) // Here we look for all the nodes that are repeated . EJ <cite id="asda"><cite id="asda"><cite id="asda"> 
    { 
     Pattern patternSimple = Pattern.compile(simpleRegex); 
     Matcher matcherSimple = patternSimple.matcher(xml); 
     String tagUnicoEnd =""; 
     if (matcherSimple.find()) //Here we get only one node. <cite id="asda"> 
      tagUnicoEnd = matcher.group(1);   

     tagMultiple = matcher.group();     
     xml =xml.replace(tagMultiple,tagUnicoEnd); //we replace all the repetead nodes, with the unique one. 
    }  

    return xml;       
} 
+0

Пытались ли вы решение XPath? http://stackoverflow.com/questions/862239/xpath-get-node-with-no-child-of-specific-type –

ответ

0

Наконец я нашел способ, я знаю, что это не самое лучшее и может быть сделано лучше

private static String replaceNodes(String simpleRegex, String xml) 
{ 

    String tagMultiple; 
    String expresionRegular = "("+simpleRegex+")+"; 

    Pattern pattern = Pattern.compile(expresionRegular); 
    Matcher matcher = pattern.matcher(xml); 


    while(matcher.find()) // Here we look for all the nodes that are repeated . EJ <cite id="asda"><cite id="asda"><cite id="asda"> 
    { 
     Pattern patternSimple = Pattern.compile(simpleRegex); 
     Matcher matcherSimple = patternSimple.matcher(xml); 
     String tagUnicoEnd =""; 
     if (matcherSimple.find()) //Here we get only one node. <cite id="asda"> 
      tagUnicoEnd = matcher.group(1);   

     tagMultiple = matcher.group();     
     xml =xml.replace(tagMultiple,tagUnicoEnd); //we replace all the repetead nodes, with the unique one. 
    }  

    return xml;       
} 
Смежные вопросы