如何使用XPath“for”表达式?

时间:2013-05-30 22:09:09

标签: xpath

我有一个像这样的xml文件:

                <record>
                    <AAA>aaa</AAA>
                    <BBB>bbb</BBB>
                    <CCC>ccc</CCC>
                </record>
                <record>
                    <AAA>ddd</AAA>
                    <BBB>eee</BBB>
                    <CCC>fff</CCC>
                </record>
                <record>
                    <AAA>ggg</AAA>
                    <BBB>hhh</BBB>
                    <CCC>iii</CCC>
                </record>

我想得到一个字符串,其中包含该xml文件中的所有内容,例如:“aaa bbb ccc; ddd eee fff; ggg hhh iii;”

我如何用XPath表达式实现这个?也许用“for in return”?

请帮忙!谢谢!

4 个答案:

答案 0 :(得分:3)

您很少需要使用for来迭代节点序列,因为路径运算符/也是如此。

所以你可以写

string-join(record/string-join(*, ' '), ';')

答案 1 :(得分:1)

怎么样

string-join((for $r in record return string-join($r/*, ' '), ''), ';')

inner for将生成一系列字符串,每一个字符串都是AAABBBCCC子元素的空格分隔字符串值,''在tge序列的末尾添加一个空字符串,然后外部string-join将用分号连接序列的项目。额外的空字符串为您提供尾随分号。

答案 2 :(得分:1)

仅是为了让您深刻了解“回报”的可能性:

    for $a in //record[1], $b in //record[2], $c in //record[3]
    return concat($a,";",$b,";",$c)

为了保持代码的简洁性,我无法在每个字母块之间添加空格。

答案 3 :(得分:0)

您提供的XML格式不正确(没有根元素)。提供记录元素位于root元素内。遵循xpath表达式

/root/record/*

将选择元素AAA,BBB,CCC,AAA,BBB,CCC,AAA,BBB,CCC。然后由您来迭代结果。这显然取决于你使用的语言,所以我不能为你提供一个例子。