0

xPATH を使用して、xml タグの 1 つに含まれる多くの属性の 1 つを抽出する必要があります。xml ペイロードを取得し、実行しているのはミュール アプリケーションです。これが私が持っているサンプルxmlです。

<?xml version="1.0" encoding="UTF-8" ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bme:version="1-0" xsi:schemaLocation="">
<env:Header>
</env:Header>
<env:Body>
        <smrst:abc xmlns:smrst="http://abc.xyz.com/2013/123-model-result" xmlns:smc="http://abc.xyz.com/2013/123-model-core" smc:applcode="123" smc:appInter="abc" smc:applicationId="123456ACV 20121203000000001239" smc:bC="111" smc:bT="GHJ" smc:ent="GHJ123" smc:mT="ASDFGH" smc:NH="33" smc:BH="0">

</env:Body>
</env:Envelope>

上記のサンプル xml の smc:NH 値と smc:BH 値を xpath を使用して抽出したいと思います。

これは私が試したもので、nullになります。私を案内してください。

<logger message="value for hit 1'st #[xpath:Envelope/Body/abc/@smc:NH]" level="INFO" doc:name="Logger"/>

フォローしようとすると、何が欠けているのかわからないというエラーが表示されます。

<logger message="value for hit #[xpath:/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='abc']/@applcode]" level="INFO" doc:name="Logger"/>

ところで、これらは単なるログ ステートメントです。値を抽出して別の変数に設定する必要があります。

4

3 に答える 3

1

他の人が示したように、名前空間を宣言して名前空間プレフィックスを適切に使用するかlocal-name()、要素に対して既に行っているようにすべてに使用する必要があります。

<logger message="value for hit #[xpath:/*[local-name()='Envelope']
                                       /*[local-name()='Body']
                                       /*[local-name()='abc']
                                       /@*[local-name() = 'applcode']" 
        level="INFO" doc:name="Logger"/>

個人的には、他の人が示唆しているように、名前空間プレフィックスを適切に宣言して使用することをお勧めします。

于 2013-07-29T01:37:56.467 に答える
1

以下のように、xpath が探している名前空間のミュール xml 名前空間マネージャーを追加します。

<xm:namespace prefix="env"  uri="http://www.w3.org/2003/05/soap-envelope" />

<xm:namespace prefix="smrst"  uri="http://abc.xyz.com/2013/123-model-result" />         

<xm:namespace prefix="smc"  uri="http://abc.xyz.com/2013/123-model-core" />         

次に、xpath を次のように変更します。

#[xpath://env:Envelope/env:Body/smrst:abc/@smc:NH]

お役に立てれば。

于 2013-07-28T11:36:06.960 に答える
1

あなたのサンプルにはいくつかの問題がありますXML

  1. 要素タイプ「env:Envelope」に関連付けられた属性「bme:version」の接頭辞「bme」はバインドされていません。
  2. エレメント タイプ<smrst:abc>が終了タグで終了していません。

最初に修正XMLしてから、名前空間マネージャーをミュール構成に追加します

   <xm:namespace-manager>
        <xm:namespace prefix="env" uri="http://www.w3.org/2003/05/soap-envelope" />
        <xm:namespace prefix="smrst" uri="http://abc.xyz.com/2013/123-model-result" />
        <xm:namespace prefix="smc" uri="http://abc.xyz.com/2013/123-model-core" />
    </xm:namespace-manager>

そして、これを行いますXPath

<logger message="Value of NH is: #[xpath('//env:Envelope/env:Body/smrst:abc/@smc:NH').value]" level="INFO" />

于 2013-07-29T01:10:38.730 に答える