diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java index 9a76a96..621032f 100644 --- a/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java +++ b/main/src/cgeo/geocaching/connector/oc/OC11XMLParser.java @@ -43,8 +43,7 @@ import java.util.regex.Pattern; public class OC11XMLParser { - private static final String PARAGRAPH_END = "</p>"; - private static final String PARAGRAPH_BEGIN = "<p>"; + private static final String[] MARKUP = new String[] { "p", "span" }; private static Pattern STRIP_DATE = Pattern.compile("\\+0([0-9]){1}\\:00"); private static Pattern LOCAL_URL = Pattern.compile("href=\"(.*)\""); private static final int CACHE_PARSE_LIMIT = 250; @@ -514,7 +513,7 @@ public class OC11XMLParser { @Override public void end(String body) { final String content = body.trim(); - descHolder.shortDesc = linkify(content); + descHolder.shortDesc = linkify(stripMarkup(content)); } }); @@ -524,7 +523,7 @@ public class OC11XMLParser { @Override public void end(String body) { final String content = body.trim(); - descHolder.desc = linkify(content); + descHolder.desc = linkify(stripMarkup(content)); } }); @@ -733,12 +732,23 @@ public class OC11XMLParser { * rendering. */ protected static String stripMarkup(String input) { - if (StringUtils.startsWith(input, PARAGRAPH_BEGIN) && StringUtils.endsWith(input, PARAGRAPH_END)) { - String inner = input.substring(PARAGRAPH_BEGIN.length(), input.length() - PARAGRAPH_END.length()); - if (!inner.contains(PARAGRAPH_BEGIN)) { - return inner.trim(); + if (!StringUtils.startsWith(input, "<")) { + return input; + } + String result = input.trim(); + for (String tagName : MARKUP) { + final String startTag = "<" + tagName + ">"; + if (StringUtils.startsWith(result, startTag)) { + final String endTag = "</" + tagName + ">"; + if (StringUtils.endsWith(result, endTag)) { + String inner = result.substring(startTag.length(), result.length() - endTag.length()).trim(); + String nested = stripMarkup(inner); + if (!nested.contains(startTag)) { + result = nested; + } + } } } - return input; + return result; } }
\ No newline at end of file |
