Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Xml XQuery中的字符串操作_Xml_String_Xquery - Fatal编程技术网

Xml XQuery中的字符串操作

Xml XQuery中的字符串操作,xml,string,xquery,Xml,String,Xquery,我的xml文件有一行: <asin ISBN="0001714600 9780001714601" code="aB1234Av"> 我想提取ISBN[0],即 00017146009780001714601 或ISBN[1]即 00017146009780001714601 我尝试了子字符串和标记化,但它不符合我的愿望。这是我的密码: <strong>{for $asin in doc('amazon.xml')/asin/@ISBN return (to

我的xml文件有一行:

<asin ISBN="0001714600 9780001714601" code="aB1234Av">

我想提取ISBN[0],即

00017146009780001714601

或ISBN[1]即

00017146009780001714601

我尝试了子字符串和标记化,但它不符合我的愿望。这是我的密码:

<strong>{for $asin in doc('amazon.xml')/asin/@ISBN
    return (tokenize($asin/data(.),'\s'))}</strong>

(OR)

<strong>{for $asin in doc('amazon.xml')/asin/@ISBN
    return (substring($asin/data(.),1))}</strong>
{doc('amazon.xml')/asin/@ISBN中的$asin
返回(标记化($asin/data(.),'\s'))}
(或)
{doc('amazon.xml')/asin/@ISBN中的$asin
返回(子字符串($asin/data(.),1))}
如何从中获取该值?

使用
tokenize()
可以

如果你把东西拆开,就更容易看到发生了什么:

let $input := <asin ISBN="0001714600 9780001714601" code="aB1234Av"/>
let $isbn-string := $input/@ISBN/string()
let $isbn-items := tokenize($isbn-string, '\s')
    return
        for $isbn-item in $isbn-items
            return <strong>{$isbn-item}</strong>
let$input:=
设$isbn字符串:=$input/@isbn/string()
让$isbn项:=标记化($isbn字符串,'\s'))
返回
对于isbn美元项目中的isbn美元项目
返回{$isbn项目}
首先获取@ISBN属性的字符串值,然后对其进行标记化,然后迭代标记化的项,逐个输出它们

PS:在XPath中,位置谓词以1开头,因此ISBN[0]将不返回任何内容。

使用
tokenize()
可以

如果你把东西拆开,就更容易看到发生了什么:

let $input := <asin ISBN="0001714600 9780001714601" code="aB1234Av"/>
let $isbn-string := $input/@ISBN/string()
let $isbn-items := tokenize($isbn-string, '\s')
    return
        for $isbn-item in $isbn-items
            return <strong>{$isbn-item}</strong>
let$input:=
设$isbn字符串:=$input/@isbn/string()
让$isbn项:=标记化($isbn字符串,'\s'))
返回
对于isbn美元项目中的isbn美元项目
返回{$isbn项目}
首先获取@ISBN属性的字符串值,然后对其进行标记化,然后迭代标记化的项,逐个输出它们


PS:在XPath中,位置谓词以1开头,因此ISBN[0]将不返回任何内容。

tokenize(@ISBN,'\s')[1]
tokenize(@ISBN,'\s')[2]
应该可以很好地工作,或者您也可以在(@ISBN,,)之前做
子字符串(@ISBN,'\s'))
标记化(@ISBN,'\s')[1]
标记化(@ISBN,'\s')[2]
应该可以很好地工作,或者您也可以在(@ISBN,')之前执行
子字符串(
),在(@ISBN,')之后执行
子字符串(

您想有条件地输出一个或另一个值,还是想全部输出?总是最多有两个值吗?是有条件地输出一个值还是另一个值?还是全部输出?总是最多有两个值吗?嗯,只有当知道只有两个值以这种方式表示时,才能(轻松地)使用substring(),这就是为什么我选择tokenize()。当然。当我们只有一个输入数据的示例,并且没有一般规则时,总是很难知道什么代码最合适;这就是为什么我给出了两个选项。嗯,只有当知道只有两个值以这种方式表示时,才能(轻松地)使用substring(),这就是为什么我选择tokenize()。当然。当我们只有一个输入数据的示例,并且没有一般规则时,总是很难知道什么代码最合适;这就是为什么我给出了两个选择。