我无法解析IOS驱动程序页面源

时间:2016-10-28 10:27:14

标签: ios dom selenium-webdriver appium

我使用

获取了Page源码
String pageSource = driver.getPageSource();

现在我需要将此xml文件保存到缓存中的本地。所以我需要获取x和y属性值等元素属性,而不是每次使用element.getAttribute("x");。但是我无法将pageSource xml文件解析为某个特殊字符。我无法删除此字符,因为如果我需要元素值/文本,它将显示不同的文本,如果我将删除特殊字符。 Appium使用相同的方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

我也遇到了同样的问题,我使用下面的代码得到了解决方案,我写的很好

public static void removeEscapeCharacter(File xmlFile) {

    String pattern = "(\\\"([^=])*\\\")";
    String contentBuilder = null;
    try {
        contentBuilder = Files.toString(xmlFile, Charsets.UTF_8);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    if (contentBuilder == null)
        return;
    Pattern pattern2 = Pattern.compile(pattern);
    Matcher matcher = pattern2.matcher(contentBuilder);
    StrBuilder sb = new StrBuilder(contentBuilder);

    while (matcher.find()) {

        String str = matcher.group(1).substring(1, matcher.group(1).length() - 1);
        try {
            sb = sb.replaceFirst(StrMatcher.stringMatcher(str),
                    StringEscapeUtils.escapeXml(str));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    try {
        Writer output = null;
        output = new BufferedWriter(new FileWriter(xmlFile, false));

        output.write(sb.toString());
        output.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果你遇到这种问题,请用删除特殊字符抓住它并再次解析。

    try {
            doc = db.parse(fileContent);
        } catch (Exception e) {
            removeEscapeCharacter(file);

            doc = db.parse(file);
        }

它可能适合你。

答案 1 :(得分:1)

我可以使用SAXParser执行相同的操作并添加处理程序来执行此操作。 请参阅SAX Parser