在特定条件下在xml文件中使用XQuery / XSD测试缺少的标记

时间:2013-08-01 10:57:43

标签: xml xsd xquery

我使用XQuery进行XML文件的XSD验证。我在文件中有一个层次结构,这样“ab”标签可以有一个子元素“bc”,但仅限于“ab”标签中的某个属性值。如果“ab”中的country属性是USA,那么我们需要让孩子“bc”,但是当country是DE时,可以省略“bc”子元素。如何在XSD和XQuery中或组合中完成?

以下是我尝试的代码:

我使用xpath:

<Check id="1" type="XQuery" title="bc 0) 'bc must be provided for country USA and BE but not for for DE'"> <XQuery> &lt;Errors&gt; { for $ab in //XDATA/ab, $bc in $ab/bc   where ($ab/@country = "USA" or $ab/@country = "BE") and (empty($bc))  return (: Query output :) &lt;Error ln="{$ab/@ln}"&gt; &lt;Case&gt; { data($ab/@countryid) } &lt; &lt;/Error&gt; } &lt;/Errors&gt; </XQuery> </Check> 

非常感谢提前 BM

1 个答案:

答案 0 :(得分:0)

请查看XQUERY示例,了解如何检查预期的情况:

let $x := <ab country="USA"><bc>dsfdsfsd</bc></ab>
let $USA := if($x[@country="USA"][bc]) then "Yes" else "No"
let $DE := if($x[@country="DE"][bc or not(bc)]) then "Yes" else "No"
return
  if($USA="Yes" or $DE="Yes")
  then "Yes"
  else
  if($USA="No" or $DE="No")
  then "No"
  else ()