Как исправить регулярное выражение, чтобы удалить xml нотацию перед каждым элементом?

Чтобы перемотать файл назад в начало (например, для его повторного чтения), вы можете использовать ifstream::seekg(), чтобы изменить положение курсора и ifstream::clear(), чтобы сбросить все внутренние флаги ошибок (в противном случае он будет отображаться на конец файла).

Во-вторых, вам может потребоваться прочитать файл только один раз и сохранить то, что вам нужно знать во временном std::deque или std::list во время анализа файла. Затем вы можете построить массив (или std::vector) из временного контейнера, если вам понадобится этот конкретный контейнер позже.

-2
задан Roberto 23 February 2019 в 17:50
поделиться

1 ответ

Вы можете использовать это регулярное выражение для сопоставления строки, которую хотите удалить из своего xml,

^\s+<\?xml\s+version="1.0".*\n

Здесь, ^\s+ гарантирует, что первая строка не соответствует той, которую желательно сохранить в строки file и rest, начинающиеся с <?xml version="1.0", удаляются, так как остальные из них начинаются с некоторого пробела.

И замените его пустой строкой,

Демо

Проверьте этот код Java,

String s = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "<User>\n"
        + "    <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "    <User>\n"
        + "        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>\n" + "    </User>\n"
        + "    <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "    <User>\n"
        + "        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>\n" + "    </User>\n"
        + "</User>";

System.out.println("Before: " + s);
System.out.println("After: " + s.replaceAll("\\s+<\\?xml\\s+version=\"1.0\".*", ""));

Это печатает это там, где удаляются строки, которые вы хотели удалить,

Before: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>
After: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>

Используйте регулярное выражение из моих примеров кода Java, я немного изменил, чтобы отрегулировать для Java и строки.

0
ответ дан Pushpesh Kumar Rajwanshi 23 February 2019 в 17:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: