繁体   English   中英

如果在jsoup中定义了元素,分配给变量的最干净方法是?

[英]Cleanest way to assign to a variable if an element in jsoup is defined?

我正在执行此String name = doc.select("h1#name").first().text(); 并且在“ h1#name”元素不存在的页面上收到了NullPointerException。 我正在解析DOM,获取了数百个元素。 似乎我需要在分配每个元素之前对其进行测试,因此我将其更改为:

String name = null;

if( doc.select("h1#name").first() != null && doc.select("h1#name").first().text() != null ))
    name = doc.select("h1#name").first.text();

有更好的方法吗? 我只是在学习Java,而我的背景是Perl,在那儿我会做这样的事情:

my $name = $doc->select("h1#name")->text if $doc->select("h1#name");

没什么大不了的,因为我的代码确实对我有用。 我只是想知道在Java中是否有更干净的方法可以做到这一点。

您将不会检查所有要访问的对象以访问所需的值。

要将您的perl语法转换为java,我将使用三元运算符

name = doc.select("h1#name").first() != null ? 
            doc.select("h1#name").first().text() : null

也无需检查doc.select("h1#name).first().text() != null除非您的名称中包含非null值并且您不想使用null覆盖它。

我会建议一种实用程序方法,如下所示:

Document mDocument;

(...)

String getElementTextOrNull (String cssQuery) {
    Element e = mDocument.select(cssQuery).first();

    if (e == null) {
        return null;
    } else {
        return e.text();
    }
}

然后,您可以消除很多样板和重复,因此您的代码将变成:

String name = getElementTextOrNull("h1#name");

您还可以使用该方法执行其他操作,例如检查文本是否为空或有效。

当然,如果仅一次获取特定元素的文本,这可能是不切实际的,但这是我不建议的。 就我个人而言,我也认为这比另一个答案中提出的三元运算符解决方案更简洁,更简洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM