1

以下の xml コードには 4 つの<e>ノードがあり、2 つのパラメーター (3 つでも) param1=EP、param2=PRF を渡す XQuery プロシージャを作成する必要があります<e>。その後、同じ構造を再印刷しますが、ノードには、値が yes または no の、ordered と呼ばれる新しい属性が必要です。<e ordered="yes">

<?xml version="1.0" encoding="UTF-8"?>
<results>
<e>
<element sign="none;isroot:yes">
    <e_afl>kamatsa</e_afl><e_asl>crawl</e_asl>
</element>
<element sign="equal">
    <e_afl>vai</e_afl><e_asl>DUR</e_asl>
</element>
<element sign="hyphen">
    <e_afl>t</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ak</e_afl><e_asl>PRF</e_asl>
</element>
<element sign="hyphen">
    <e_afl>i</e_afl><e_asl>REAL</e_asl>
</element>
<element sign="equal">
    <e_afl>na</e_afl><e_asl>1SG.O</e_asl>
</element>
</e>
<e>
<element sign="none">
    <e_afl>i</e_afl><e_asl>3m.A</e_asl>
</element>
<element sign="equal;isroot:yes">
    <e_afl>pos</e_afl><e_asl>hit</e_asl>
</element>
<element sign="hyphen">
    <e_afl>a</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>vai</e_afl><e_asl>DUR</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ve</e_afl><e_asl>FRUS</e_asl>
</element>
<element sign="hyphen">
    <e_afl>t</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ak</e_afl><e_asl>PRF</e_asl>
</element>
<element sign="hyphen">
    <e_afl>a</e_afl><e_asl>REAL</e_asl>
</element>
<element sign="equal">
    <e_afl>na</e_afl><e_asl>1SG.O</e_asl>
</element>
</e>
<e>
<element sign="none">
    <e_afl>y</e_afl><e_asl>3m.A</e_asl>
</element>
<element sign="equal;isroot:yes">
    <e_afl>aNt</e_afl><e_asl>work</e_asl>
</element>
<element sign="hyphen">
    <e_afl>vai</e_afl><e_asl>DUR</e_asl>
</element>
<element sign="hyphen">
    <e_afl>t</e_afl><e_asl>PRF</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ak</e_afl><e_asl>CAUS.SOC</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ak</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>i</e_afl><e_asl>REAL</e_asl>
</element>
<element sign="equal">
    <e_afl>ri</e_afl><e_asl>3m.O</e_asl>
</element>
</e>
<e>
<element sign="none">
    <e_afl>n</e_afl><e_asl>1SG.S</e_asl>
</element>
<element sign="equal;isroot:yes">
    <e_afl>aNt</e_afl><e_asl>work</e_asl>
</element>
<element sign="hyphen">
    <e_afl>a</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>vai</e_afl><e_asl>DUR</e_asl>
</element>
<element sign="hyphen">
    <e_afl>t</e_afl><e_asl>EP</e_asl>
</element>
<element sign="hyphen">
    <e_afl>ak</e_afl><e_asl>PRF</e_asl>
</element>
<element sign="hyphen">
    <e_afl>i</e_afl><e_asl>REAL</e_asl>
</element>
</e>
</results>
4

1 に答える 1

1

BaseX はXQuery Updateをサポートしています。updateまた、変換式を簡素化すると呼ばれる便利な (現時点ではまだ実装固有ですが、標準化のために W3C で問題が保留中です) 演算子もあります。

XML ドキュメントは常に 1 つのルート要素を持つため、XML は現在整形式ではないことに注意してください。これを追加すると、次のように動作するはずです。

for $e in doc("your-xml-file.xml")//e
return
  if ($e/element[e_asl = "EP"][following-sibling::element/e_asl = "PRF"])
  then $e update insert node (attribute {"ordered"} {"yes"}) into .
  else $e

ちなみに、元のデータベースを変更したい場合は、次のコマンドを発行できます

SET WRITEBACK true

(または、コマンド ラインとコマンドを使用して BaseX を起動し-u)、次のコマンドを実行します。

for $e in doc("e.xml")//e[element[e_asl = "EP"][following-sibling::element/e_asl = "PRF"]]
return insert node (attribute {"ordered"} {"yes"}) into $e
于 2014-05-20T20:06:16.660 に答える