0

我有一个这样的 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

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

4

1 回答 1

2

怎么样:

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

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

显然 selectSingleNode() 不返回 null 或提供任何其他方式来区分导致空节点集的 XPath 表达式和上下文与产生一个或多个节点的上下文。所以不能满足现在的需要。

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

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

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

我没有对此进行测试,但它应该能让你达到你的目标。

于 2010-10-04T16:25:24.370 回答