如何获得类似的xquery?

时间:2014-04-02 22:14:21

标签: xquery

我正在尝试获取包含单词" Placa Base" "微",MEMORIA" 。 我想要那样的事情:

<placa> 
 <denominacion>Placa Base MSI G41M-P26</denominacion> 
</placa> 
<micro> 
 <denominacion>Micro Intel Core i5-2320</denominacion> 
</micro> 
<micro> 

编辑:

我试过了:

 for $zone in /productos/produc
let $placa := /productos/produc[contains(lower-case(.),"placa")]/denominacion 
let $micro := /productos/produc[contains(lower-case(.),"micro")]/denominacion 
let $mem := /productos/produc [ contains (lower-case(.),"memoria")]/denominacion 
let $altres:=/productos/produc[ contains(lower-case  (.),"hd")]/denominacion 
let $altres1:=/productos/produc[ contains(lower-case  (.),"tarjeta")]/denominacion 
return <placas><placa>{ data($placa) }</placa>
        <micro>{ data($micro) }</micro>
        <memoria>{ data($mem) }</memoria>
        <altres>{ data($altres) }</altres>
        <altres>{ data($altres1) }</altres>
</placas>

但结果是:

<placas>
    <placa>Placa Base MSI G41M-P26 Placa Base ASRock G41M-S3 </placa>
    <micro>Micro Intel Core i5-2320 Micro Intel Core i5 2500 Micro Intel Dual Core G620</micro>
    <memoria>Memoria DDR3 G.Skill 2GB Memoria DDR3 G.Skill 4GB Memoria DDR3 Kingston HyperX 4GB</memoria>
    <altres>HD Seagate Barracuda 250GB SATA HD Caviar Blue 500GB SATA3</altres>
    <altres>Tarjeta gráfica Asus GeForce EN210 Silent 1GB Tarjeta gráfica Gigabyte GeForce 1GB Tarjeta gráfica Nvidia Express 1GB</altres>
</placas>
<placas>
    <placa>Placa Base MSI G41M-P26 Placa Base ASRock G41M-S3 </placa>
    <micro>Micro Intel Core i5-2320 Micro Intel Core i5 2500 Micro Intel Dual Core G620</micro>
    <memoria>Memoria DDR3 G.Skill 2GB Memoria DDR3 G.Skill 4GB Memoria DDR3 Kingston HyperX 4GB</memoria>
    <altres>HD Seagate Barracuda 250GB SATA HD Caviar Blue 500GB SATA3</altres>
    <altres>Tarjeta gráfica Asus GeForce EN210 Silent 1GB Tarjeta gráfica Gigabyte GeForce 1GB Tarjeta gráfica Nvidia Express 1GB</altres>
</placas>

...... ...... ......

现在,我在迭代上遇到问题,我只想显示一次结果。

xml:

<productos>
<TITULO>DATOS DE LA TABLA PRODUCTOS</TITULO>
<produc>
<cod_prod>1010</cod_prod>
<denominacion>Placa Base MSI G41M-P26</denominacion>
<precio>50</precio>
<stock_actual>10</stock_actual>
<stock_minimo>3</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
<produc>
<cod_prod>1011</cod_prod>
<denominacion>Micro Intel Core i5-2320</denominacion>
<precio>120</precio>
<stock_actual>3</stock_actual>
<stock_minimo>5</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
...

感谢。

2 个答案:

答案 0 :(得分:0)

这需要对工作进行大量修改。我提供了一个完整的,格式完整的查询(包含数据),以便于测试。

请注意declare context item是XQuery 3.0中的新增功能。

declare context item := document { <productos>
<TITULO>DATOS DE LA TABLA PRODUCTOS</TITULO>
<produc>
<cod_prod>1010</cod_prod>
<denominacion>Placa Base MSI G41M-P26</denominacion>
<precio>50</precio>
<stock_actual>10</stock_actual>
<stock_minimo>3</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
<produc>
<cod_prod>1011</cod_prod>
<denominacion>Micro Intel Core i5-2320</denominacion>
<precio>120</precio>
<stock_actual>3</stock_actual>
<stock_minimo>5</stock_minimo>
<cod_zona>10</cod_zona>
</produc>
</productos>
};
declare variable $words := ("Placa Base", "Micro", "Memoria");

for $zone in /productos/produc
for $word in $words
let $placa := $zone/denominacion[contains(., $word)]
where $placa
return <placa word="{$word}">{data($placa)}</placa>

请注意,如果您忽略其结果并再次引用根,则for表达式无效。也就是说,如果您重新for $zone in /productos/produc,请在内部参考$zone,而不是/productos/produc

答案 1 :(得分:0)

let $placa := /productos/produc[contains(lower-case(.),"placa")]/denominacion 
let $micro := /productos/produc[contains(lower-case(.),"micro")]/denominacion 
let $mem := /productos/produc [ contains (lower-case(.),"memoria")]/denominacion 
let $altres := /productos/produc[ contains(lower-case  (.),"hd")]/denominacion 
let $altres1 := /productos/produc[ contains(lower-case  (.),"tarjeta")]/denominacion 
return 
  <placas>
    <placa>{ $placa }</placa>
    <micro>{ $micro }</micro>
    <memoria>{ $mem }</memoria>
    <altres>{ $altres }</altres>
    <altres>{ $altres1 }</altres>
  </placas>