|
19 | 19 | import java.util.regex.Pattern; |
20 | 20 |
|
21 | 21 | public class XMLElement { |
| 22 | + private static final Pattern START_ELEMENT_NAME_PATTERN = Pattern.compile("<\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ |
| 23 | + private static final Pattern END_ELEMENT_NAME_PATTERN = Pattern.compile("</\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ |
| 24 | + private static final Pattern ATTRIBUTE_PATTERN = Pattern.compile("((?<key>\\w*)\\s*=\\s*\"(?<value>.*?)\")", //$NON-NLS-1$ |
| 25 | + Pattern.DOTALL); |
| 26 | + private static final Pattern START_ELEMENT_PATTERN = Pattern.compile("<[^/].*", Pattern.DOTALL); //$NON-NLS-1$ |
| 27 | + private static final Pattern END_ELEMENT_PATTERN = Pattern.compile("</.*|.*/>.*", Pattern.DOTALL); //$NON-NLS-1$ |
| 28 | + |
22 | 29 | private final String element; |
23 | 30 | private final int offset; |
24 | 31 | private final String name; |
25 | 32 | private final Map<String, String> attributes = new HashMap<>(); |
26 | 33 | private final boolean isEndElement; |
27 | 34 | private final boolean isStartElement; |
28 | 35 |
|
29 | | - private final Pattern startElementNamePattern = Pattern.compile("<\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ |
30 | | - private final Pattern endElementNamePattern = Pattern.compile("</\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ |
31 | | - private final Pattern attributePattern = Pattern.compile("((?<key>\\w*)\\s*=\\s*\"(?<value>.*?)\")", Pattern.DOTALL);//$NON-NLS-1$ |
32 | | - |
33 | 36 | public XMLElement(String element, int offset) { |
34 | 37 | this.element = element; |
35 | 38 | this.offset = offset; |
36 | | - this.isEndElement = element.matches("</(.|\n)*|(.|\n)*/>(.|\n)*"); //$NON-NLS-1$ |
37 | | - this.isStartElement = element.matches("<[^/](.|\n)*"); //$NON-NLS-1$ |
| 39 | + this.isEndElement = END_ELEMENT_PATTERN.matcher(element).matches(); |
| 40 | + this.isStartElement = START_ELEMENT_PATTERN.matcher(element).matches(); |
38 | 41 |
|
39 | 42 | Pattern namePattern; |
40 | 43 | if (isStartElement()) { |
41 | | - namePattern = startElementNamePattern; |
| 44 | + namePattern = START_ELEMENT_NAME_PATTERN; |
42 | 45 | } else { |
43 | | - namePattern = endElementNamePattern; |
| 46 | + namePattern = END_ELEMENT_NAME_PATTERN; |
44 | 47 | } |
45 | 48 | Matcher nameMatcher = namePattern.matcher(element); |
46 | 49 | nameMatcher.matches(); |
47 | 50 | name = nameMatcher.group("name"); //$NON-NLS-1$ |
48 | 51 |
|
49 | | - Matcher attrMatcher = attributePattern.matcher(element); |
| 52 | + Matcher attrMatcher = ATTRIBUTE_PATTERN.matcher(element); |
50 | 53 | while (attrMatcher.find()) { |
51 | 54 | String key = attrMatcher.group("key"); //$NON-NLS-1$ |
52 | 55 | String value = attrMatcher.group("value"); //$NON-NLS-1$ |
|
0 commit comments