Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用like获取xquery?_Xquery - Fatal编程技术网

如何使用like获取xquery?

如何使用like获取xquery?,xquery,Xquery,我正在尝试获取包含单词“Placa Base”、“micro”、“memoria”的元素。 我想要这样的东西: <placa> <denominacion>Placa Base MSI G41M-P26</denominacion> </placa> <micro> <denominacion>Micro Intel Core i5-2320</denominacion> </micro>

我正在尝试获取包含单词“Placa Base”、“micro”、“memoria”的元素。 我想要这样的东西:

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

普拉卡基地MSI G41M-P26
Micro Intel Core i5-2320
编辑:

我试过这个:

 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>
用于/productos/produc中的$zone
让$placa:=/productos/produc[contains(小写(.),“placa”)]/denominacion
让$micro:=/productos/produc[contains(小写(.),“micro”)]/denominacion
让$mem:=/productos/produc[contains(小写(.),“memoria”)]/denominacion
let$altres:=/productos/produc[contains(小写(.),“hd”)]/denominacion
让$altres1:=/productos/produc[contains(小写(.),“tarjeta”)]/denominacion
返回{data($placa)}
{数据($micro)}
{data($mem)}
{数据($altres)}
{data($altres1)}
但结果是:

<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>

Placa基底MSI G41M-P26 Placa基底ASRock G41M-S3
Micro Intel Core i5-2320 Micro Intel Core i5 2500 Micro Intel双核G620
Memoria DDR3 G.技能2GB Memoria DDR3 G.技能4GB Memoria DDR3 Kingston HyperX 4GB
高清希捷梭鱼250GB SATA高清鱼子酱蓝500GB SATA3
Tarjeta gráfica华硕GeForce EN210静音1GB Tarjeta gráfica千兆字节GeForce 1GB Tarjeta gráfica Nvidia Express 1GB
Placa基底MSI G41M-P26 Placa基底ASRock G41M-S3
Micro Intel Core i5-2320 Micro Intel Core i5 2500 Micro Intel双核G620
Memoria DDR3 G.技能2GB Memoria DDR3 G.技能4GB Memoria DDR3 Kingston HyperX 4GB
高清希捷梭鱼250GB SATA高清鱼子酱蓝500GB SATA3
Tarjeta gráfica华硕GeForce EN210静音1GB Tarjeta gráfica千兆字节GeForce 1GB Tarjeta gráfica Nvidia Express 1GB
。。。。。。 ......

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

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>
...

塔布拉产品酒店
1010
普拉卡基地MSI G41M-P26
50
10
3.
10
1011
Micro Intel Core i5-2320
120
3.
5.
10
...

谢谢。

这需要大量修改。我提供的答案是一个完整的、格式良好的查询(包括数据),以便于测试

请注意,
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>
声明上下文项:=文档{
塔布拉产品酒店
1010
普拉卡基地MSI G41M-P26
50
10
3.
10
1011
Micro Intel Core i5-2320
120
3.
5.
10
};
声明变量$words:=(“Placa Base”、“Micro”、“Memoria”);
对于/productos/produc中的$zone
在$words中输入$word
让$placa:=$zone/denominacion[包含(,$word)]
哪里有$placa
返回{data($placa)}
请注意,如果忽略其结果并再次引用根,则
for
表达式是无用的。也就是说,如果您在/productos/produc中
for$zone,请在内部引用
$zone
,而不是
/productos/produc

让$placa:=/productos/produc[包含(小写(.),“placa”)]/脱硝
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>
让$micro:=/productos/produc[contains(小写(.),“micro”)]/denominacion 让$mem:=/productos/produc[contains(小写(.),“memoria”)]/denominacion let$altres:=/productos/produc[contains(小写(.),“hd”)]/denominacion 让$altres1:=/productos/produc[contains(小写(.),“tarjeta”)]/denominacion 返回 {$placa} {$micro} {$mem} {$altres} {$altres1}
不会
让$deno:=$zone/denominacion
让$placa:=$zone[…]/…
更有意义吗?如果每次都从根开始计算,为什么要在FLWOR中进行赋值?@CharlesDuffy我认为就最佳实践而言,一般来说你是对的。我只是试图用最小的更改来回答正确性问题。有时一次了解一个错误更容易;)你的解决方案启动了我这个错误:effecTiveBoleanValue(真、假、假……)的第一项不是节点。@user3325719我更新了答案以反映您的更新;但是,我认为您对XQuery和XPath语法有一个根本性的误解。正如在另一个答案中提到的,您的查询误用了for循环构造,这是主要问题。删除它会得到您想要的结果。另外,
data()
在这里是不必要的,而且几乎从来都不是。顺便说一句,实现这一点的真正正确方法可能是使用带有全文搜索扩展的数据库(例如,BaseX支持这一点),并遵循所述扩展的文档。这是一个很好的解决方案,但他们希望我按照我在第一条消息中解释的方式来做。无论如何,谢谢。这非常有帮助。