0

次のような XML スキーマ要素があります。

<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 と空の文字列を区別する方法は?

4

1 に答える 1

2

どうですか:

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

更新: @Alejandro は、説明を追加すると役立つと指摘しました。

どうやら selectSingleNode() は null を返さないか、空のノードセットになる XPath 式とコンテキストと、1 つまたは複数のノードを生成するものとを区別する他の方法を提供しません。それでは、現在のニーズに応えられません。

ただし、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 に答える