Skip to main content
Created for OutSystems 10. Not working on your version? Tell us about it!

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

XPath式を使用したXMLファイルの解析

XPathを使用してXMLファイルから値を取得するにはどのようにすればよいですか?

例: 以下のXMLファイルには、様々なカテゴリ(料理本、児童図書、Webブック)の本と、各本のタイトル、著者、出版年、価格の情報が含まれています。

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="web">
        <title lang="en">XPath Basics</title>
        <author>Omar Little</author>
        <year>2002</year>
        <price>5.08</price>
    </book>
    <book category="web">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

Webブックの情報のみを取得するにはどのようにすればよいですか?

回答

OutSystemsには、XMLファイルの解析、操作、シリアル化ができるXMLエクステンションがあります。XPath式もサポートしています。

XMLファイルからWebブックの情報を取得するには、以下の手順を実行します。

  1. モジュールに以下の依存関係を追加します。

    • BinaryDataエクステンションのBinaryDataToText
    • XmlエクステンションのXmlDocument_Load_v2
    • XmlエクステンションのXmlDocument_SelectNodes
    • XmlエクステンションのXmlElement_GetInnerText
    • XmlエクステンションのXmlElement_SelectSingleNode
    • XmlエクステンションのXmlNodeList_Count
    • XmlエクステンションのXmlNodeList_Item
  2. Title(Text)、Author(Text)、Year(Integer)、Price(Decimal)の各アトリビュートを含むBookストラクチャを作成します。

  3. サーバーアクションを作成し、以下の変数を追加します。

    • XML: Binary Dataデータ型の必須入力パラメータ
    • Encoding: Textデータ型のオプションの入力パラメータ
    • Current: Integerデータ型デフォルト値0のローカル変数
    • Book: Bookデータ型のローカル変数
    • Books: Book Listデータ型の出力パラメータ

    サーバーアクションはXMLファイルとオプションのEncoding引数を受け取り、XMLファイルから取得したBooksのリストを返します。

  4. XMLエクステンションのXmlDocument_Load_v2アクションを追加し、入力Xmlを以下のように設定します。

    BinaryDataToText(XML,Encoding)
    

    これにより、XMLバイナリファイルがテキストに変換されDOMオブジェクトにロードされます。

  5. 前のアクションの後に、XMLエクステンションのXmlDocument_SelectNodesアクションを追加します。入力XmlDocumentを「XmlDocument_Load_v2.XmlDocument」に設定し、入力XPathStringを「"/bookstore/book[@category='web']"」に設定します。

    これにより、XPathでフィルタリングされたWebカテゴリに属する本のリストが返されます。

  6. 前のアクションの後に、XMLエクステンションのXmlNodeList_Countアクションを追加し、入力XmlNodeListを「XmlDocument_SelectNodes.XmlNodeList」に設定します。

    これにより、フィルタリングされたリスト内のWebブックの合計数がカウントされます。

  7. 前のアクションの後にIfノードを追加し、Conditionを「Current < XmlNodeList_Count.Count」に設定します。

    これにより、Current変数がフィルタリングされたリスト内のWebブックの合計数と等しくなったときに停止するループが作成されます。

  8. Ifの横に、XMLエクステンションのXmlNodeList_Itemアクションを追加し、それをTrueブランチに接続します。入力XmlNodeListを「XmlDocument_SelectNodes.XmlNodeList」に設定し、入力Indexを「Current」に設定します。

    これにより、(Current変数を使用して)いずれかのWebブックが取得されます。

  9. 前のアクションの後に、XMLエクステンションのXmlElement_SelectSingleNodeアクションを追加します。入力XmlElementを「XmlNodeList_Item.XmlNode」に設定し、入力XPathStringを「"title"」に設定します。

    これにより、現在のWebブックのtitleノードが選択されます。

  10. 前のアクションの後に、XMLエクステンションのXmlElement_GetInnerTextアクションを追加し、入力XmlElementを「XmlElement_SelectSingleNode.XmlNode」に設定します。

    これにより、現在のWebブックのタイトルが取得されます。

  11. 前の2つの手順をauthoryearpriceの各アトリビュートで繰り返します。入力をそれぞれ適切に変更します。

    これにより、現在のWebブックの残りの情報が選択・取得されます。

  12. XmlElement_GetInnerText4アクションの後にAssignノードを追加し、以下のAssignmentsを設定します。

    • Current = Current+1
    • Book.Title = XmlElement_GetInnerText.InnerText
    • Book.Author = XmlElement_GetInnerText2.InnerText
    • Book.Year = TextToInteger(XmlElement_GetInnerText3.InnerText)
    • Book.Price = TextToDecimal(XmlElement_GetInnerText4.InnerText)

    これにより、収集された情報がBookローカル変数に割り当てられます。

  13. Assignの後にListAppendを追加し、それをIfに接続します。入力Listを「Books」に設定し、入力Elementを「Book」に設定します。

    これにより、現在のWebブックの情報がBooks出力に追加されます。

サーバーアクションは以下の画像のようになります。

XML Parseサーバーアクション