Dom4j XPath区分null或空字符串

时间:2010-10-04 16:05:21

标签: java xpath dom4j

我有一个像这样的XML Schema元素:

<xs:element type="xs:string" name="IsActive" minOccurs="0"> </xs:element>

我正在使用dom4j XPath来评估元素。

似乎无法确定XML文档中是否存在元素,或者它的值是否只是""

我希望<IsActive>成为,1)"" 2)"anyvalue1" 3)"anyvalue"

此外,我想知道<IsActive>是否存在。

XPath valuePath;
Node obj = (Node)valuePath.selectSingleNode(requestElement);

obj.getText()始终返回"",即使<IsActive>不存在。

valuePath.valueOf(requestElement); // does the same

所以我的问题是:如何区分null和空字符串?

1 个答案:

答案 0 :(得分:2)

怎么样:

List nodeList = valuePath.selectNodes(requestElement);
if (nodeList.isEmpty()) ...

更新: @Alejandro指出添加解释会很有帮助。

显然,selectSingleNode()不返回null或提供任何其他方法来区分导致空节点集的XPath表达式和上下文,以及产生一个或多个节点的方法。所以这不符合当前的需要。

但是,selectNodes()返回与给定上下文中的XPath表达式匹配的List个节点。所以我们可以使用List.isEmpty()方法(或size()方法)来发现XPath是否与零节点匹配,或者是非零。

如果节点匹配,为了获得(第一个)匹配节点,我们可以使用nodeList.get(0)

List nodeList = valuePath.selectNodes(requestElement);
if (!nodeList.isEmpty())
    doSomethingWith(nodeList.get(0));

我没有对此进行过测试,但它应该可以让您实现目标。