Page History
...
- XML の例
- XML Path Language (XPath) の紹介
- XMLQueryService で使用する XPath 使用例
- XML 名前空間と XMLQueryService の XPath 式への影響
XML の例
このセクションの後半で提供されている例では、以下のXML ドキュメントの簡素なサンプルを参照します。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Orders SYSTEM "http://www.acme.com/schemas/tutorder.dtd" ><Orders> <SalesOrder SONumber="12345"> <Customer CustNumber="543"> <CustName>ABC Industries</CustName> <Street>123 North St.</Street> <City>Bankstown</City> <State>NSW</State> <PostCode>2087</PostCode> </Customer> <OrderDate>2012-11-19</OrderDate> <Line LineNumber="1"> <Part PartNumber="123"> <Description>Gasket Paper</Description> <Price>9.95</Price> </Part> <Quantity>10</Quantity> </Line> <Line LineNumber="2"> <Part PartNumber="456"> <Description>Glue</Description> <Price>13.27</Price> </Part> <Quantity>5</Quantity> </Line> </SalesOrder></Orders>
XML Path Language (XPath) の紹介
XPath はパス式を構成するための構文で、XML ドキュメントのノードを選択することができます。 ある意味、このパス式は、自身のコンピュータでファイル・システムの作業をする際のパス式と大変良く似ています。
...
| Note |
|---|
重要な注意点: XML ノード名では大文字と小文字が区別されます。 XPath 式ではエレメントや属性の名前を指定する際に大文字と小文字を正しく指定する必要があります。 例えば、式 '//salesorder' は '//SalesOrder' と同じではありません。 上記に示されているサンプル XML ドキュメントと共に利用する場合、'//salesorder' の式はエラーになり、どのノードも選択しませんが、'//SalesOrder' では、ドキュメントのどの場所であっても発生する、すべての <SalesOrder> エレメントが選択されます。 |
XMLQueryService で使用する XPath 使用例
次は、XMLQueryService の QUERY コマンドのパラメータで使用する XPath 式の例で、上で示されているサンプル XML ドキュメントの値を選択します。
- 次の例では、<SalesOrder> エレメントの選択に XML と XPath の大文字小文字が誤って使われているため、何も選択されません。
QUERY NODES(//SALESORDER) NODESVALUE1(@SONumber) - 次の 2 つの例はいずれも、<SalesOrder> エレメントすべてを選択して、それぞれに対して販売注文番号を返します。 機能的には、この 2 つは同じです(サンプル XML ドキュメントを使用した場合)。
QUERY NODES(//SalesOrder/@SONumber)QUERY NODES(//SalesOrder) NODESVALUE1(@SONumber) - すべての <SalesOrder> エレメントを選択し、それぞれに顧客番号を返します。
QUERY NODES(//SalesOrder) NODESVALUE1(Customer/@CustNumber) - 顧客番号に値 '543' を持つ <Customer> エレメントを選択して、親エレメント <SalesOrder> の販売注文番号を返します。
QUERY NODES(//Customer\[@CustNumber="543"\]) NODESVALUE1(../@SONumber) - 指定の注文番号の <SalesOrder> に対するすべての <Part> エレメントを選択して、それぞれに対するパーツ番号を返します。
QUERY NODES(//SalesOrder\[@SONumber="12345"\]/Line/Part)NODESVALUE1(@PartNumber)NODESVALUE2(../Quantity) - 価格が 2.99 よりも大きい <Part> エレメントをすべて選択し、注文番号、パーツ番号、価格、数量を返して、合計金額 (価格*数量) も返します。
QUERY NODES(//Part[Price>2.99])NODESVALUE1(../../@SONumber)NODESVALUE2(@PartNumber)NODESVALUE3(Price)NODESVALUE4(../Quantity)NODESVALUE5(Price*../Quantity)
XML 名前空間と XMLQueryService の XPath 式への影響
これまで利用したサンプルは、名前空間の明示的な宣言が無く、名前空間の接頭辞も使用していない XML ドキュメントに対する演算でした。 これは最もシンプルな形ですが、多くの場合、これが現実を反映している訳ではありません。
...