0

以下の xml を、それぞれ 2 つのストリームを含む 2 つの部分に分割したいと考えています。

/stream.PurchaseOrder/orderLine/products/stream.Product 

それは製品を 4 つの部分に分割します。要件を達成するための表現やテクニックを手伝ってくれる人はいますか?

<stream.PurchaseOrder>
  <metaData>
    <supplierId>1001</supplierId>
    <supplier>Supplier1</supplier>
  </metaData>
  <orderLine>
    <manufacturer>Manufacturer-1993628836</manufacturer>
    <location>Location-1616142228</location>
    <products>
      <stream.Product>
        <productId>852693979</productId>
        <productName>ProductName-20</productName>
        <price>100</price>
        <model>Model413</model>
        <quantity>50</quantity>
      </stream.Product>
      <stream.Product>
        <productId>1111</productId>
        <productName>ProductName11</productName>
        <price>40</price>
        <model>Model12</model>
        <quantity>150</quantity>
      </stream.Product>
      <stream.Product>
        <productId>85</productId>
        <productName>ProductName3</productName>
        <price>10</price>
        <model>Model3</model>
        <quantity>5</quantity>
      </stream.Product>
      <stream.Product>
        <productId>11</productId>
        <productName>ProductName4</productName>
        <price>4</price>
        <model>Model4</model>
        <quantity>15</quantity>
      </stream.Product>
    </products>
  </orderLine>
</stream.PurchaseOrder>
4

1 に答える 1

2

count(/stream.PurchaseOrder/orderLine/products/stream.Product)Product 要素の数をカウントし、それを 2 で割るのに使用する必要がありroundます。要素の数が奇数の場合に備えて、関数を使用して丸めます。次に、position()以下に示すように関数を使用します。

前半:

/stream.PurchaseOrder/orderLine/products/stream.Product[position()<=round(count(/stream.PurchaseOrder/orderLine/products/stream.Product) div 2)]

後半:

/stream.PurchaseOrder/orderLine/products/stream.Product[position()>round(count(/stream.PurchaseOrder/orderLine/products/stream.Product) div 2)]
于 2012-08-08T10:13:30.463 に答える