无效的 Xquery 内容:第 89 行,第 44 列:{http://www.w3.org/2005/xqt-errors}XPST0003 [{http://xmlns.oracle.com/xdk/xquery/error}XPST0003c]:语法错误。"/ns1:produ"是意外的
迁移到 1.0 V 后的 X查询
xquery version "1.0";
(: Caring Included Logic Reset/@actioncode :)
(: Caring Fix#358 :)
(: Included CR for Project Caring :)
(: Added a xf:escape-dot function as a part of Jan - Break Fix :)
(: Included changes for Project Caring :)
(: Included mapping for accountGroups - CUG Migration :)
(: Included changes for Project AggregatedAlerts :)
(:: pragma bea:global-element-parameter parameter="$manageServiceOrder" element="ns3:manageServiceOrder" location="../../schemas/pf.bil.BillingProvisioning_3.0.xsd" ::)
(:: pragma bea:global-element-return element="ns0:CreateOrderCustomerRequest" location="../../../../resources_3.0/util/BRMAdapter/interfaces/InfranetUtilityCreate.xsd" ::)
declare namespace ns2 = "http://vodafone.com.au/ebo/vha/ProvisioningAndFulfilmentComponents/V3.0";
declare namespace ns1 = "http://vodafone.com.au/ebo/vha/CommonComponents/V3.0";
declare namespace ns3 = "http://vodafone.com.au/pf/bil/ebm/BillingProvisioning/V3.0";
declare namespace ns0 = "http://www.vodafone.co.au/infranetUtilityCreate/schema";
declare namespace xf = "http://tempuri.org/pf.bil_3.0/resources/billingProvisioning/BRM/EBO.SyncSubscription.billingProvisioning_xForm_BRM.createOrder/";
declare namespace temp = "http://www.w3.org/2001/XMLSchema";
declare xqse function xf:formatDateTimes($dateTime as element(*)*) as xs:dateTime?
{
declare $dateTimeValue :=data($dateTime);
try
{
return value (xs:dateTime(replace(fn-bea:dateTime-to-string-with-format("yyyyMMddHHmmss",$dateTimeValue),"^(d{4})(d{2})(d{2})(d{2})(d{2})(d{2})$","$1-$2-$3T$4:$5:$6")));
}
catch (* into $err, $msg)
{
return value (xs:dateTime(replace(fn-bea:date-to-string-with-format("yyyyMMdd",$dateTimeValue),"^(d{4})(d{2})(d{2})$","$1-$2-$3T00:00:00")));
};
};
declare xqse function xf:isValidChargeShareAtribute( $chargeShareLines as element(*)) as xs:boolean?
{
try
{
iterate $attribute over $chargeShareLines/ns1:productService/ns1:attributes/ns1:attribute[fn:upper-case(ns1:name/text()) eq "CSG REFERENCE" or fn:upper-case(ns1:name/text()) eq "CSG SPONSORSHIP"]
{
if (
( ($attribute/ns1:value ne "" and $chargeShareLines/@actionCode eq "New")
or
$chargeShareLines/@actionCode eq "Modified"
or
($attribute/ns1:value ne "" and $chargeShareLines/@actionCode eq "Deleted")
)
) then return value (fn:boolean("true")) else return value( (fn:boolean("false")));
};
}
catch (* into $err, $msg)
{ return value (fn:boolean("false"));
};
};
declare function xf:lookupDVMWrapper($dvmName as xs:string, $sourceColumn as xs:string,$sourceValue as xs:string, $targetColumn as xs:string, $needAnException as xs:boolean)as element(*)
{
let $dvmres :=(fn-bea:lookupDVM($dvmName,$sourceColumn,$sourceValue,$targetColumn,'NO DATA FOUND'))
return
if ((($dvmres='') or ($dvmres='NO DATA FOUND')) and $needAnException)
then
<dvmresp>
<dvmexception>
{
concat($sourceValue,' for ',$sourceColumn,' in ',$dvmName,'.dvm', ' not found' )
}
</dvmexception>
</dvmresp>
else if((($dvmres='') or ($dvmres='NO DATA FOUND')) and not($needAnException))
then
<dvmresp></dvmresp>
else
<dvmresp>
{
$dvmres
}
</dvmresp>
};
declare function xf:formatDate( $dateTime as element(*)*) as xs:dateTime?
{
let $dateTimeValue :=data($dateTime)
return xs:dateTime(replace(fn-bea:date-to-string-with-format("yyyyMMdd",$dateTimeValue),"^(d{4})(d{2})(d{2})$","$1-$2-$3T00:00:00"))
};
declare function xf:calculateVFPeriodEndDate($manageServiceOrder as element (*),$serviceLines as element(*))
as xs:dateTime? {
if ($serviceLines/@actionCode eq "Deleted" or $serviceLines/@actionCode eq "Suspended")
then xf:formatDateTimes(element{"billEffectiveDate"}{ $manageServiceOrder/ns3:serviceOrder/ns2:billingDetails/ns2:billEffectiveDate/text()})
else if (fn:string-length(data($serviceLines/ns1:productService/ns1:periodEndDate)) >0 and data($serviceLines/ns1:productService/ns1:periodEndDate) ne "")
then xf:formatDate( element { "periodEndDate" } {if(fn:contains(data($serviceLines/ns1:productService/ns1:periodEndDate),"T"))then
fn:substring-before(data($serviceLines/ns1:productService/ns1:periodEndDate),"T")
else
$serviceLines/ns1:productService/ns1:periodEndDate/text()})
else if (
for $expiryDate in $serviceLines/ns1:productService/ns1:attributes/ns1:attribute[ns1:name/text() eq "Expiry Date"]/ns1:value/text()
return
if (fn:string-length($expiryDate) >0) then xf:formatDateTimes( element { "expiryDate" } {$expiryDate}) else() )
then
(
for $expiryDate in $serviceLines/ns1:productService/ns1:attributes/ns1:attribute[fn:upper-case(ns1:name/text()) eq "EXPIRY DATE"]/ns1:value/text()
return xf:formatDateTimes( element { "expiryDate" } {$expiryDate})
)
else ()
};
这里有几件事在 XQuery 1.0 中是不允许的。最突出的是:
declare $dateTimeValue :=data($dateTime);
你不能像这样声明局部变量。你需要let $v := expr return XXX
.
return value (xs:dateTime(...);
关键字 return value
是错误的,应将其删除。
iterate $attribute over $chargeShareLines
我不知道iterate
表达式的作用,但它不是XQuery。看起来像for
表达式的某种变体,但我不知道它有什么不同。
try {
需要 XQuery 3.0/3.1,语法与您的语法略有不同。