我正在对这个XML做出不同的选择,但对于大多数人来说,我不确定我是否做了最简单的解决方案,其中2个我无法提供可行的解决方案。
<?xml version="1.0" ?>
<!DOCTYPE list[
<!ELEMENT list(man|woman)*>
<!ELEMENT man(sons,daughters)>
<!ATTLIST man name CDATA #REQUIRED>
<!ELEMENT man(sons,daughters)>
<!ATTLIST woman name CDATA #REQUIRED>
<!ELEMENT sons(man)*>
<!ELEMENT daughters(woman)*>
<list>
<man name="Jean-Bernard">
<sons>
<man name="Marc-Antoine"/>
</sons>
<daughters>
<woman name="Marie-Jeanne">
<sons/>
<daughters>
<woman name="Anne-Sophie"/>
</daughters>
</woman>
<woman name="Rose-Marie">
<daughters>
<woman name="Marie-Cécile"/>
</daughters>
</woman>
</daughters>
</man>
<woman name="Marie-Jeanne">
<sons>
<man name="Ghislain-Auguste">
<sons/>
</man>
</sons>
<daughters>
<woman name="Rita-Lise">
<sons>
<man name="Alain-Luc"/>
<man name="Jules-Edouard"/>
</sons>
</woman>
</daughters>
</woman>
</list>
我做了什么:
//woman
//woman[@name='Marie-Jeanne']
//woman[contains(@name,Marie)]
我做了什么,但这不完全或我认为它可以更好:
//*[sum(count(sons/man), count(daughters/woman)) >= 2]
//*/*/*/*
。 。 。我不明白如何开始。答案 0 :(得分:3)
选择所有至少有2个孩子的女性或男性:
//*[(self::man or self::woman) and count(*/*) > 1]
选择所有祖父母的女性或男性
//*[(self::man or self::woman) and */*/*/*]
答案 1 :(得分:1)
为了更容易选择所有祖父母的女性或男性,您可以使用“自我”声明XPath to select multiple tags:
//*[count(*[self::sons or self::daughters]/*[self::man or self::woman]/*[self::sons or self::daughters]/*[self::man or self::woman]) >= 1]