3

フィールドを取得してループすることになっているTalendでこの仕事をしています。

私の大きな問題は、コードが XML フィールドをループしているのに null を返すことです。XML のサンプルを次に示します。

<?xml version="1.0" encoding="ISO-8859-1"?>
<empresas>
    <empresa>
        <imoveis>
            <imovel>
                [-- some fields --  ]

                <fotos>
                    <nome id="" order="">photo1</nome>
                    <nome id="" order=""></nome>
                    <nome id="" order=""></nome>
                    <nome id="" order=""></nome>
                </fotos>
            </imovel>
            [ -- other entries here -- ]
        </imoveis>
    </empresa>
</empresas>

現在、tExtractXMLField コンポーネントを使用して、「fotos」要素を取得しようとしています。これが私がコンポーネントに持っているものです: ここに画像の説明を入力

XPath クエリと XPath ループ クエリを変更しようとしましたが、その結果、フィールドをループ処理しないか、tMap の値フィールドで null が取得されます。

お仕事イメージはこちら

ここに画像の説明を入力

XML から 4 つの項目を取得したことがわかりますが、"nome" フィールドに null が表示されます。XPathに何か問題があるに違いありませんが、問題が見つからないようです:(

誰かが私を助けてくれることを願っています。ありがとうございます: ubuntu 10.10 64bit で talendv4.1.2 を使用しています。

4

5 に答える 5

7

ノードでループする場合は<nome>、ループXPathクエリを実行する必要があります。

"/empresas/empresa/imoveis/imovel/fotos/nome"

およびfoto_nomeXPathQueryのようなもの

"text()"

注意:問題を引き起こす可能性のあるXMLのエラーも修正しました(</imoveis>「s」がありません)。

于 2011-09-30T07:42:41.843 に答える
1

サンプルの仕事
テストジョブを作成しました。これは間違いなく役立ちます。私が間違っていなければ、「fotos」タグの下にあるすべての「nome」を取得する必要があります。

于 2014-12-10T07:08:36.713 に答える
1

それには2つの方法があります。1 つの方法は、XMLinput と青みがかった指示を直接使用することです。

もう1つの方法は、選択したパスを続行することです。XMLinput で、Loop XPath クエリが に設定されていること、およびGet Nodesオプションがオンになっているfotos要素を"/empresas/empresa/imoveis/imovel/fotos"通過していることを確認します。fotos要素の XPath クエリはまたはである必要があります。"../fotos""."

あなたの extractXMLField コンポーネントは適切に構成されているようです。また、あなたのデザインで tSetGlobalVar が何をするのかわかりませんが、通過しようとしているfotos要素に影響を与えないようにしてください。

于 2011-11-04T11:03:18.710 に答える
0

ループの xpath をファイルのトップ レベル "empresas" に変更してみてください。それがうまくいくこともありますが、「?xml version="1.0" encoding="ISO-8859-1"?」タグが以前に問題を引き起こした場合は、それを削除してみてください。

また、tFileInputXML でエンコーディングが正しく設定されていることを確認してください。

于 2011-06-23T17:53:32.887 に答える
0

XML の読み取りと XML からの XML の抽出を混同していると思います。

XML の読み取り: 提供した XML の一部が tFileInputXML によって読み取られるファイルである場合、tExtractXMLField は必要ありません。tFileInputXML を次のように構成するだけです。

  • <nome>この「//nome」のように、xpathループを要素に設定します
  • tFileInputXML コンポーネントの id、order、content に 3 つの列を追加します。
  • xpath クエリ "." でコンテンツ列を取得します。
  • xpath クエリ "@id" で ID 値を取得する
  • xpathクエリ「@order」で注文値を取得

ここに画像の説明を入力

XML からの XML の抽出: これが tExtractXMLField コンポーネントの目標です。データベース列または別の XML ドキュメントに含まれる XML データを、それ自体がデータ フローであるかのように解析できます。

簡単に言うと、tExtractXMLField は、XML を含む列レコードからデータの流れを作成します。SOAP クエリの結果を解析するときに非常に便利です。サーバーの応答は通常、次のように xml として提供されます。

<arg2> 
  <![CDATA[
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <exportInscriptionEnLigneType>
      <date>2015-04-10</date>
      <nbDossiers>2</nbDossiers>
      <reference>20150410100</reference>
      <listeDossiers>
        <dossier>
          <numOrdre>1</numOrdre>
          <identifiantDossier>AAAAA</identifiantDossier>
        </dossier>
        <dossier>
          <numOrdre>2</numOrdre>
          <identifiantDossier>BBBBB</identifiantDossier>
        </dossier>
      </listeDossiers>
    </exportInscriptionEnLigneType>
]]>
</arg2> 

上記の XML では、arg2>element に解析が必要な XML ドキュメントが含まれています。

tExtractXMLField は、この目的のために作成されました。この作業を行う方法についてのチュートリアルを書きました。こちらの「xml から xml を抽出する方法」をご覧ください。フランス語ですが、スクリーンショットは、提供されたいくつかのコメントを理解するのに役立つ場合があります.

それが役立つことを願っています。

よろしくお願いします、

于 2015-12-27T07:44:16.230 に答える