Как удалить тег xml, который просто содержит число, используя Groovy - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующий XML образец:

<?xml version="1.0" encoding="UTF-8" ?>
<0>
    <user>
        <fname>bob</fname>
        <lname>marley</lname>
        <age>30</age>
    </user>
</0>
<1>
    <user>
        <fname>john</fname>
        <lname>lennon</lname>
        <age>20</age>
    </user>
</1>
<2>
    <user>
        <fname>phil</fname>
        <lname>smith</lname>
        <age>40</age>
    </user>
</2>

Я хотел бы в конечном итоге только пользователей .... как так ...

    <user>
        <fname>bob</fname>
        <lname>marley</lname>
        <age>30</age?
    </user>
    <user>
        <fname>john</fname>
        <lname>lennon</lname>
        <age>20</age>
    </user>
    <user>
        <fname>phil</fname>
        <lname>smith</lname>
        <age>40</age>
    </user>

I Я уже использовал регулярное выражение, чтобы избавиться от строки объявления XML ... но теперь мне нужно удалить целочисленные теги и получить только теги USER

Это то, что я до сих пор. Я получаю путаницу в части регулярных выражений .. (Я думаю!)

String x1 = '''
<?xml version="1.0" encoding="UTF-8" ?>
<0>
    <user>
        <fname>bob</fname>
        <lname>marley</lname>
        <age>30</age>
    </user>
</0>
<1>
    <user>
        <fname>john</fname>
        <lname>lennon</lname>
        <age>20</age>
    </user>
</1>
<2>
    <user>
        <fname>phil</fname>
        <lname>smith</lname>
        <age>40</age>
    </user>
</2>
'''

import java.util.regex.Pattern

//remove the XML declaration
String x2 = x1.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim();

//grab the opening XML tag --- not quite sure how to insert dynamic REGEX here
String openingNumberTag = "<" + "[0-9]+" + ">";

//grab the closing XML tag --- not quite sure how to insert dynamic REGEX here
String closingNumberTag = "</" + "[0-9]+" + ">";

//Now iterate through the XML string and remove the number tags
if (x2.matches(openingNumberTag))
{
    //remove it somehow;                     
}
if (x2.matches(closingNumberTag))
{
    //remove it somehow;                     
}

//Print the final XML string with just the USER tags
println(x2);

Любая помощь приветствуется Спасибо

1 Ответ

0 голосов
/ 26 марта 2020

Я решил это таким образом ...

String x1 = '''
<?xml version="1.0" encoding="UTF-8" ?>
<0>
    <user>
        <fname>bob</fname>
        <lname>marley</lname>
        <age>30</age>
    </user>
</0>
<1>
    <user>
        <fname>john</fname>
        <lname>lennon</lname>
        <age>20</age>
    </user>
</1>
<2>
    <user>
        <fname>phil</fname>
        <lname>smith</lname>
        <age>40</age>
    </user>
</2>
'''

import java.util.regex.Pattern

//remove the XML declaration
String x2 = x1.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim();
String x3 = x2.replaceAll("<[0-9]+>", "").trim();
String x4 = x3.replaceAll("</[0-9]+>", "").trim();


println(x4);
...