2013-06-05 45 views
0

这里是我的DTD + XML:xpath - 为什么我的查询不起作用?

<!DOCTYPE test [ 
    <!ELEMENT team(owner+)> 
    <!ATTLIST team 
    name ID #REQUIRED 
    coach IDREF #REQUIRED 
    > 
    <!ELEMENT owner  (#PCDATA)> 
    <!ELEMENT coach EMPTY> 
    <!ATTLIST coach 
    name ID #REQUIRED 
    > 
    <!ELEMENT game EMPTY> 
    <!ATTLIST game 
    teams IDREFS #REQUIRED 
    winner IDREF #REQUIRED 
    > 
    <!ELEMENT db (coach*,team*,match*)> 
]> 


<?xml version="1.0" ?> 

    <db> 
     <team name = "Hapoel" coach = "Abuksis"> 
      <owner> Eli Tabib</owner> 
     </team> 
     <team name = "Maccabi" coach = "Blat"> 
      <owner> Shimi</owner> 
      <owner> Federman</owner> 
     </team> 
     <team name = "Beitar" coach = "Eli Cohen"> 
      <owner> Arkadi</owner> 
     </team> 
     <team name = "ElitzorLavi" coach = "Eli"> 
      <owner> Zehava</owner> 
      <owner> Dani</owner> 
     </team> 
     <coach name = "Abuksis"/> 
     <coach name = "Eli Cohen"/> 
     <coach name = "Blat"/> 
     <coach name = "Eli"/> 
     <game teams = "Hapoel Maccabi" winner = "Maccabi"/> 
     <game teams = "Hapoel Beitar" winner = "Beitar"/> 
     <game teams = "Maccabi ElitzorLavi" winner = "Maccabi"/> 
     <game teams = "Elitzor Lavi Maccabi" winner = "Maccabi"/> 
    </db> 

我一定要找到比赛,使得球队的数量是现在我希望能得到的只有第一场比赛。 我试过这个Xpath: db/game [count(/ @ teams)< 2] 但它给了我所有的游戏..我的错误是什么?

回答

1

xpaths中有几个问题。您应该通过/区分元素和属性。 ./@name只能缩短为@name。另外,如果你想获得的名称作为结果,你必须在年底使用/@name

db/team[count(owner)>1][not(@name=//game/@winner)]/@name 
+0

还没有成型。并且它似乎属性你不必使用'/' – user2456731

+0

我使用http://www.bit-101.com/xpath/运行查询 – user2456731

+0

@ user2456731:您没有使用标准的XPath。我的解决方案适用于我。 – choroba

0

问:我必须找到有一个以上的所有者和从来没有赢得比赛的球队。

尝试:

db/team[count(owner)>1][not(@name = //game/@winner)] 
+0

谢谢,依然不起作用。当我尝试 db/team [count(owner)> 1]我得到两队(Maccabi&ElizurLavi) 所以问题是没有胜利。 – user2456731

+0

我使用http://www.bit-101.com/xpath/运行查询 – user2456731