Java Regex для соответствия XML теги - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь определить шаблон регулярного выражения, чтобы соответствовать тегам XML.

У меня есть два типа тегов XML. Первый вид

<myTag value="One" value="Two">SomeContentHere</myTag>

Этот тег можно сопоставить со следующим шаблоном регулярных выражений.

<myTag[\s\S]*?>[\s\S]*?<\/myTag>

Второй тип, у меня есть тот же тег, который отображается как <myTag value="One" value="Two"/>. Я изо всех сил пытаюсь найти регулярное выражение для соответствия этим видам тегов XML. Мне нужно сопоставить все XML, как в приведенном выше сопоставлении в первом виде. Моя цель состоит в том, чтобы найти шаблон регулярного выражения, который может захватить оба сценария ios.

Я пробовал что-то вроде <myTag[\s\S]*?>[\s\S]*?[<\/myTag>]?, но в этом случае этот шаблон не может захватить мой первый тип тега XML

Пожалуйста, помогите мне.

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Здесь, в этом сообществе, есть множество ответов на вопрос, почему плохо использовать регулярные выражения для этого. Сказав, что вот подход к этой проблеме. Преобразуйте вашу строку в документ, если это возможно. Это возможно, если String является действительным xml. Затем найдите нужный тег в документе. Код:

private boolean containsTag(String xml, String tagName)
    {
        Document doc = getDocument(xml);
        if ( doc != null )
        {
           NodeList list = doc.getElementsByTagName(tagName);
           return list != null && list.getLength() > 0;
        }
        return false;
    }


    private static Document getDocument(String xml) 
    {

         try
         {
             DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
             Document doc = docBuilder.parse(new InputSource(new StringReader(xml)));
             return doc;
         } 
         catch (Exception e) 
         {
             e.printStackTrace();
         }
         return null;
   }
1 голос
/ 10 апреля 2020

• Для вашего первого типа тега используйте: (<myTag)([\s\S]*?)(>)([\s\S]*?)(<\/myTag>)

• Для вашего второго типа тега используйте: (<myTag)([\s\S]*?)(\/>)

• Для обоих типов одновременно используйте: (<myTag)([\s\S]*?)(\/>)|(<myTag)([\s\S]*?)(>)([\s\S]*?)(<\/myTag>)

FirstTypeExample

SecondTypeExample

BothTypeAtTheSameTimeExample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...