我正在尝试获取包含单词" 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>
...
感谢。
答案 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>