0

jxpath 要素の text() を取得できますか、それとも機能しませんか?

素敵なxmlが与えられた場合:

<?xml version="1.0" encoding="UTF-8"?>
<AXISWeb xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AXISWeb.xsd">
    <Action>
    <Transaction>PingPOS</Transaction>
    <PingPOS>
        <PingStep>To POS</PingStep> 
        <PingDate>2012-11-15</PingDate> 
        <PingTime>16:35:57</PingTime> 
    </PingPOS>
    <PingPOS>
        <PingStep>POS.PROCESSOR18</PingStep> 
        <PingDate>2012-11-15</PingDate> 
        <PingTime>16:35:57</PingTime> 
    </PingPOS>
    <PingPOS>
        <PingStep>From POS</PingStep> 
        <PingDate>2012-11-15</PingDate> 
        <PingTime>16:35:57</PingTime> 
    </PingPOS>
</Action>
</AXISWeb>

//動作しません:

jxpc.getValue("/AXISWeb/Action/PingPOS[1]/PingStep/text()");

//動作しません:

jxpc.getValue("/action/pingPOS[1]/PingStep/text()");

//動作しません:

jxpc.getValue("/action/pingPOS[1]/PingStep[text()]");

を使用してテキストを取得できることを知っています

jxpc.getValue("/action/pingPOS[1]/PingStep");

しかし、それは重要ではありません。動作しませんtext()か?私は例を見つけることができませんでした....

PSまた、大文字と小文字の区別についても非常にうるさいです。どうにかオフにできませんか?

ありがとう、-G

4

2 に答える 2

2

/AXISWeb/Action/PingPOS[1]/PingStep/text()ドキュメントの有効な XPath です

しかし、jxpath のユーザー ガイドからわかること (注: jxpath はまったく知りません)は、ノードのテキスト コンテンツを返すことになっているため、XPathをまったくgetValue()使用する必要はありません。text().

したがって、次を使用できます。

jxpc.getValue("/AXISWeb/Action/PingPOS[1]/PingStep");

ユーザーガイドからの抜粋:

次の XML ドキュメントについて考えてみましょう。

<?xml version="1.0" ?>
<address>
  <street>Orchard Road</street>
</address> 

同じ XPath を使用するとgetValue("/address/street")、 は文字列を返します"Orchard Road"が、 selectSingleNode("/address/street")- 要素型 (使用するパーサーの種類に応じて DOM または JDOM) のオブジェクトを返します。もちろん、返される Element は です<street>Orchard Road</street>

タグ名の大文字と小文字を区別しないクエリについては、XPath 2 を使用している場合は使用できますlower-case()node()、これはあまりお勧めできません。正しい名前を使用することをお勧めします。

/*[lower-case(node())='axisweb']/*[lower-case(node())='action']/...

または、XPath 1 を使用している場合は、使用できますtranslate()が、さらに悪化します。

/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'axisweb']/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'action']/...

全体として、正しいクエリを使用していることを確認してください。大文字と小文字が区別されることがわかっているため、注意を払うことをお勧めします。Java で行うように、同じ変数ではありませんfoofOo


編集:

先ほど言ったように、XML と XPath は大文字と小文字を区別するため、pingStep一致できませんPingStep。正しい名前を使用して検索してください。

に関してtext()は、これは XPath 1.0 の一部であり、XPath 2 で使用する必要はありません。JXPathgetValue()はすでに呼び出しを行っていtext()ます。自分でやりたい場合は、(基礎となるパーサーに応じて)型selectSingleNode("//whatever/text()")を返すを使用する必要があります。ObjectTextElement

要約すると、メソッドJXPathContext.getValue()はすでにノードのテキスト コンテンツを選択する作業を行っているため、自分でそれを行って XPath の を明示的に呼び出す必要はありませんtext()

于 2012-11-15T21:59:53.073 に答える
1

メソッド.getTextContent()があなたに代わって仕事をする前に私が答えた投稿から。Xpathを評価するときに「text()」を使用する必要はありません。

例 :

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("D:\\Loic_Workspace\\Test2\\res\\test.xml"));


    System.out.println(doc.getElementsByTagName("retCode").item(0).getTextContent());

そうでない場合は、タグと値を取得します。もっとやりたい場合はこれを見てください

于 2012-12-05T20:32:03.690 に答える