2012-02-27 14 views
1

XQueryスクリプトは、xmlファイルにあるすべての会社名と連絡先名を表示する必要があります。同じxmlファイルの複数の属性

この私が持っているものである: -

for $x in doc("Customers.xml")/dataroot/Customers return $x/CompanyName $x/ContactName

例のXML

<dataroot> 
    <Customers> 
     <CustomerID>ALFKI</CustomerID> 
     <CompanyName>Alfreds Futterkiste</CompanyName> 
     <ContactName>Maria Anders</ContactName> 
     <ContactTitle>Sales Representative</ContactTitle> 
     <Address>Obere Str. 57</Address> 
     <City>Berlin</City> 
     <PostalCode>12209</PostalCode> 
     <Country>Germany</Country> 
     <Phone>030-0074321</Phone> 
     <Fax>030-0076545</Fax> 
    </Customers> 
    <Customers> 
     <CustomerID>ANATR</CustomerID> 
     <CompanyName>Ana Trujillo Emparedados y helados</CompanyName> 
     <ContactName>Ana Trujillo</ContactName> 
     <ContactTitle>Owner</ContactTitle> 
     <Address>Avda. de la Constitución 2222</Address> 
     <City>México D.F.</City> 
     <PostalCode>05021</PostalCode> 
     <Country>Mexico</Country> 
     <Phone>(5) 555-4729</Phone> 
     <Fax>(5) 555-3745</Fax> 
    </Customers> 
    <Customers> 
     <CustomerID>ANTON</CustomerID> 
     <CompanyName>Antonio Moreno Taquería</CompanyName> 
     <ContactName>Antonio Moreno</ContactName> 
     <ContactTitle>Owner</ContactTitle> 
     <Address>Mataderos 2312</Address> 
     <City>México D.F.</City> 
     <PostalCode>05023</PostalCode> 
     <Country>Mexico</Country> 
     <Phone>(5) 555-3932</Phone> 
    </Customers> 
    <Customers> 
     <CustomerID>AROUT</CustomerID> 
     <CompanyName>Around the Horn</CompanyName> 
     <ContactName>Thomas Hardy</ContactName> 
     <ContactTitle>Sales Representative</ContactTitle> 
     <Address>120 Hanover Sq.</Address> 
     <City>London</City> 
     <PostalCode>WA1 1DP</PostalCode> 
     <Country>UK</Country> 
     <Phone>(171) 555-7788</Phone> 
     <Fax>(171) 555-6750</Fax> 
    </Customers> 
    <Customers> 
     <CustomerID>BERGS</CustomerID> 
     <CompanyName>Berglunds snabbköp</CompanyName> 
     <ContactName>Christina Berglund</ContactName> 
     <ContactTitle>Order Administrator</ContactTitle> 
     <Address>Berguvsvägen 8</Address> 
     <City>Luleå</City> 
     <PostalCode>S-958 22</PostalCode> 
     <Country>Sweden</Country> 
     <Phone>0921-12 34 65</Phone> 
     <Fax>0921-12 34 67</Fax> 
    </Customers> 

私は会社名と担当者名を返すようにしたいです。これらは、テーブル形式に簡単に変換できるようにする必要があります。

+0

ありがとうございます。私は、会社名と連絡先の名前ごとに個別のテーブルを用意するのではなく、連絡先の名前と会社の名前を持つ単一のテーブルにすべてのエントリをレイアウトすることを望んでいました。 –

+0

データソース(Customers.xml)の外観の例を教えてください。 – tohuwawohu

+0

私はnorthwind 2000データベースを使用して、customerName、companyName、phone、addressなどを含んでいます。それをxmlに変換しました。 私は基本的にSQLコードを変換しようとしています SELECT customername、companynameからCustomers –

答えて

1

XQueryの基本データモデルは、テーブルまたはrelationではなくsequenceです。これはXQueryのresultにも当てはまります。したがって、デフォルトでは、return句によって返されるシーケンスを受け取ります。デフォルトで返される「列」や「表」はありません。シーケンスとは異なる、あるいはより深く構造化されたリターン構造が必要な場合は、それを自分で追加する必要があります。

構造化された結果を取得する最も簡単な方法は、XML出力を作成することです。そのため、ほとんどのXQueryチュートリアルは、プレーンテキストやその他のものではなく、XMLを返すことから始まります。

あなたが出力として「テーブル構造」を必要とする場合、あなたはさまざまなオプションがあります。

  • 出力XMLを、別のアプリケーションにインポートします。
  • 出力(X)HTMLとHTMLテーブル。
  • CSVを出力し、希望のスプレッドシートソフトウェアでインポート/解析します。出力XMLへ

、あなたは以下を使用することができは:(より正確にはCSV出力について

<table> 
    <row> 
     <CompanyName>Alfreds Futterkiste</CompanyName> 
     <ContactName>Maria Anders</ContactName> 
    </row> 
    <row> 
     <CompanyName>Ana Trujillo Emparedados y helados</CompanyName> 
     <ContactName>Ana Trujillo</ContactName> 
    </row> 
    <row> 
     <CompanyName>Antonio Moreno Taquería</CompanyName> 
     <ContactName>Antonio Moreno</ContactName> 
    </row> 
    <row> 
     <CompanyName>Around the Horn</CompanyName> 
     <ContactName>Thomas Hardy</ContactName> 
    </row> 
    <row> 
     <CompanyName>Berglunds snabbköp</CompanyName> 
     <ContactName>Christina Berglund</ContactName> 
    </row> 
</table> 

:CSV-のシーケンス

xquery version "1.0"; 
<table> 
{ 
    for $cust in fn:doc("Customers.xml")/dataroot/Customers 
    return 
     <row> 
     { 
      $cust/CompanyName, $cust/ContactName 
     } 
     </row> 
} 
</table> 

それはのようなものを返します。あなたのようなものを得るには

xquery version "1.0"; 
for $cust in fn:doc("Customers.xml")/dataroot/Customers 
return 
concat('"', $cust/CompanyName, '"', ',', '"', $cust/ContactName, '"') 

"Alfreds Futterkiste","Maria Anders" 
"Ana Trujillo Emparedados y helados","Ana Trujillo" 
"Antonio Moreno Taquería","Antonio Moreno" 
"Around the Horn","Thomas Hardy" 
"Berglunds snabbköp","Christina Berglund" 

EDIT:一部のXQueryプロセッサでは、組み込みのCSVシリアル化も提供されています。たとえば、Zorba XQuery processorにはmodule to parse/serialize CSVが含まれています。

+0

ありがとうございました。 –