我有一个像这样的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和空字符串?
答案 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));
我没有对此进行过测试,但它应该可以让您实现目标。