APIXMLデータのループが配列に正しく追加されていません

MBH

これがXMLです。サイトIDを探しています。

<result created="2018-10-13T13:11:18-05:00" host="redacted" status="OK">
<items>
<site>
<siteid>399700</siteid>
<name>
<![CDATA[ Warehouse ]]>
</name>
<connection_ok>1</connection_ok>
</site>
<site>
<siteid>547401</siteid>
<name>
<![CDATA[ Monterey Park ]]>
</name>
<connection_ok>1</connection_ok>
</site>
</items>
</result>

探しているデータを取得するには、最初にクライアントIDのXMLを反復処理する必要があります。次に、クライアントIDを使用して各クライアントのサイトIDを見つけることができます。一部のクライアントには複数のサイトがあります。

クライアントは正しく取得されますが、より適切な用語がないため、サイトは圧縮されています。

結果:


クライアントID :12345サイトID:9876543210

サイトIDは2つの個別の番号である必要があります:98765 43210

これが私が使っている2つの関数です:

$ClientsIDs = @()
$SiteIDs = @()

function Get-Clients() {
    $clientdata = Invoke-RestMethod -Uri ($baseurl + $lc)
    $clientid = $clientdata.result.items.client.clientid
    $Script:ClientsIDs += $clientid
    Write-Output("Client ID: " + $ClientsIDs)
}

function Get-Sites() {
    foreach ($id in $Global:ClientsIDs) {
        $sitedata = Invoke-RestMethod -Uri ($baseurl + $ls + $id)
        $siteid = $sitedata.result.items.site.siteid 
        $SiteIDs += $siteid
    }
    Write-Output("Site ID: " + $SiteIDs)
}

Get-Clients
Get-Sites

(URLのみが表示されていません。sはWrite-Output、データが正しく収集されていることを確認するためだけのものです。最終的には削除されます。)

$sitedid配列に正しく保存するにはどうすればよいですか?

mklement0

tl; dr

コードをリファクタリングすることをお勧めします。これにより、問題が回避され、より効率的で、より優れたカプセル化が提供されます。

function Get-Sites() {
    # Note: Also consider passing the parent-scope 
    #       $ClientsIDs, $baseurl, $ls variables as *parameters* instead.
    foreach ($id in $ClientsIDs){
        $sitedata = Invoke-RestMethod -Uri ($baseurl + $ls + $id)
        # Implicitly output each site ID, which by
        # virtue of being inside a foreach loop outputs
        # all of them as an array.
        $sitedata.result.items.site.siteid 
    }
}

# If you wanted to interpret the IDs as *numbers*, you
# could use type [int[]], for instance
[array] $SiteIDs = Get-Sites

あなたがしようとしたものを

に割り当て $SiteIDsずにスコープ修飾子 script$script:SiteIDs)、あなたが誤って作成しているローカル $SiteIDsあなたの内部変数Get-Sitesの関数を。

スコープスコープの変数を参照しますが、直接割り当てることはできません。割り当てによって作成されているローカルコピー、親スコープから同じ名前の変数の型(および値)を継承します(この回答参照してください)。PowerShellでのスコープの詳細をご覧ください)。$SiteIDs

$SiteIDs本当にスクリプトスコープ内の配列である場合、ローカルコピーも配列を作成しますが、それでもスクリプトスコープ内の元の配列は変更されません

$SiteIDsあなたの場合、サイトIDの文字列連結含まれることになったという事実は実際のコードがスクリプトスコープに変数を作成ない配列$SiteIDs@()ではなく文字列型であるということ+=示唆しています。[string]タイプされた、または以前に存在しなかった変数へのRHSとしての文字列は、単純な文字列連結を実行します(変数が存在しなかった場合、デフォルトで空の文字列になる既存の値にRHSを直接追加します)。

即時修正は次のようになります。

  • それ$SiteIDs = @()がスクリプトスコープで本当に定義されていること、つまり配列として定義されていることを確認してください

  • 意図したとおり、script-scope変数を直接変更$SiteIDs += $siteidする$script:SiteIDs += $siteidようにに変更します。

とはいえ、一般にスコープの境界を越えて変数を参照することは避けたほうがよいでしょう。上部に示されているように、カプセル化を改善するためにパラメーターとローカル変数を使用してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

辞書データが別の辞書に正しく追加されていません

分類Dev

foreachループの変数に配列が追加されていません

分類Dev

文字列配列からVBAループが正しく実行されていません

分類Dev

Googleスプレッドシートのデータが正しいセルに表示されていません

分類Dev

PythonPandasデータが正しく配置されていません

分類Dev

データが正しく合計されていません

分類Dev

$ _FILES名がデータベースに正しくアップロードされていません

分類Dev

私のカスタム配列リストがAndroidKotlinで正しくソートされていません

分類Dev

最初のルールがCSSJavaScript関数に正しく追加されていませんか?

分類Dev

D3結合のオブジェクトの新しいデータ配列が正しく認識されていません

分類Dev

角度データがモデルに正しくバインドされていません

分類Dev

配列の値が正しく出力されていません

分類Dev

データ配列が正しく機能していませんか?

分類Dev

ドイツ語の文字üöäÄÜÖßがデータベースに正しく保存されていません

分類Dev

nodemailerのFirebase関数がデプロイされていますが、ログがなく、データベースで正しく機能していません

分類Dev

テーブルにはajaxデータが追加されていませんが、ブラウザではjson配列が表示されています

分類Dev

UWP:言語のリソースファイルが正しくデプロイされていません

分類Dev

kdbテーブルをデータフレームに保存してから、データフレームをcsvに保存します。nullと文字列の値がcsvに正しく出力されていませんか?

分類Dev

データがデータベースに正しく保存されていません

分類Dev

パンダデータフレームが正しく識別されていません:「タプル」のインスタンスに「フィルター」メンバーがありません

分類Dev

一部のデータが配列に保存されていません

分類Dev

jqueryを使用したjsonデータからhtmlテーブルへjsonデータがテーブルに正しく追加されていない1つの列にのみデータが含まれている

分類Dev

Angular:エラーTypeError:データが正しく表示されているのに、nullのプロパティ 'choice_set'を読み取れません

分類Dev

データが正しくフォーマットされていません

分類Dev

追加された配列要素にデータが入力されていません

分類Dev

forループの後に配列が入力されていませんか?

分類Dev

PHPのファイルにデータが追加されていません

分類Dev

テーブルの単一の列にあるMYSQL数学。サブクエリが正しくグループ化されていません

分類Dev

配列のデータ値が正しく印刷されない

Related 関連記事

  1. 1

    辞書データが別の辞書に正しく追加されていません

  2. 2

    foreachループの変数に配列が追加されていません

  3. 3

    文字列配列からVBAループが正しく実行されていません

  4. 4

    Googleスプレッドシートのデータが正しいセルに表示されていません

  5. 5

    PythonPandasデータが正しく配置されていません

  6. 6

    データが正しく合計されていません

  7. 7

    $ _FILES名がデータベースに正しくアップロードされていません

  8. 8

    私のカスタム配列リストがAndroidKotlinで正しくソートされていません

  9. 9

    最初のルールがCSSJavaScript関数に正しく追加されていませんか?

  10. 10

    D3結合のオブジェクトの新しいデータ配列が正しく認識されていません

  11. 11

    角度データがモデルに正しくバインドされていません

  12. 12

    配列の値が正しく出力されていません

  13. 13

    データ配列が正しく機能していませんか?

  14. 14

    ドイツ語の文字üöäÄÜÖßがデータベースに正しく保存されていません

  15. 15

    nodemailerのFirebase関数がデプロイされていますが、ログがなく、データベースで正しく機能していません

  16. 16

    テーブルにはajaxデータが追加されていませんが、ブラウザではjson配列が表示されています

  17. 17

    UWP:言語のリソースファイルが正しくデプロイされていません

  18. 18

    kdbテーブルをデータフレームに保存してから、データフレームをcsvに保存します。nullと文字列の値がcsvに正しく出力されていませんか?

  19. 19

    データがデータベースに正しく保存されていません

  20. 20

    パンダデータフレームが正しく識別されていません:「タプル」のインスタンスに「フィルター」メンバーがありません

  21. 21

    一部のデータが配列に保存されていません

  22. 22

    jqueryを使用したjsonデータからhtmlテーブルへjsonデータがテーブルに正しく追加されていない1つの列にのみデータが含まれている

  23. 23

    Angular:エラーTypeError:データが正しく表示されているのに、nullのプロパティ 'choice_set'を読み取れません

  24. 24

    データが正しくフォーマットされていません

  25. 25

    追加された配列要素にデータが入力されていません

  26. 26

    forループの後に配列が入力されていませんか?

  27. 27

    PHPのファイルにデータが追加されていません

  28. 28

    テーブルの単一の列にあるMYSQL数学。サブクエリが正しくグループ化されていません

  29. 29

    配列のデータ値が正しく印刷されない

ホットタグ

アーカイブ