XQuery 解决方案可能如下所示。返回最外层元素revenue,并查找名称中包含“revenue”的所有元素,无论是小写还是大写,这就是translate() 函数所做的。
在这里,输入文档被分配给变量$x,但您也可以使用doc() 函数或任何其他方式来检索eXist 提供的XML 数据。
XQuery
let $x := <financial_statement><revenue>123</revenue><interestRevenue>234</interestRevenue><salaries>12</salaries><transactionRevenue>345</transactionRevenue><revenueOtherServices>109</revenueOtherServices><sales>783</sales><costs>746</costs></financial_statement>
return <revenue>{$x//*[contains(translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'revenue')]}</revenue>
使用translate() 保证了对XPath 1.0 的可移植性,但由于XQuery 使用XPath 2.0,您还可以使用lower-case() 或upper-case() 来模拟不区分大小写的contains() 函数。
XML 输出
<revenue>
<revenue>123</revenue>
<interestRevenue>234</interestRevenue>
<transactionRevenue>345</transactionRevenue>
<revenueOtherServices>109</revenueOtherServices>
</revenue>
如果您真的需要 XSLT 解决方案,以下转换可以满足您的需求。由于 XQuery 和 XSLT 都使用 XPath,因此方法几乎相同。
XML 输入
<financial_statement>
<revenue>123</revenue>
<interestRevenue>234</interestRevenue>
<salaries>12</salaries>
<transactionRevenue>345</transactionRevenue>
<revenueOtherServices>109</revenueOtherServices>
<sales>783</sales>
<costs>746</costs>
</financial_statement>
XSLT 样式表
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<revenue>
<xsl:apply-templates/>
</revenue>
</xsl:template>
<xsl:template match="*[contains(translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'revenue')]">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:transform>
XML 输出
<revenue>
<revenue>123</revenue>
<interestRevenue>234</interestRevenue>
<transactionRevenue>345</transactionRevenue>
<revenueOtherServices>109</revenueOtherServices>
</revenue>
实际上我没有使用编程语言。
嗯,你知道,XQuery 是一种编程语言。在我看来,是的。