繁体   English   中英

XPath选择具有不同名称的同级节点

[英]XPath selecting same level node with different name

我对这个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
  • 选择名为“Marie Jeanne”的所有女性: //woman[@name='Marie-Jeanne']
  • 选择名字中包含“Marie”的所有女人: //woman[contains(@name,Marie)]

我做了什么,但这不完全或我认为它可以更好:

  • 选择所有至少有2个孩子的女性或男性: //*[sum(count(sons/man), count(daughters/woman)) >= 2]
  • 选择所有祖父母的女性或男性:我完全陷入困境,我无法看到我如何选择这么多未知数。 在我看来,这就是: //*/*/*/* 我不明白如何开始。

选择所有至少有2个孩子的女性或男性:

//*[(self::man or self::woman) and count(*/*) > 1]

选择所有祖父母的女性或男性

//*[(self::man or self::woman) and */*/*/*]

为了更容易选择所有祖父母的女性或男性,您可以使用“自我”声明性XPath来选择多个标签

//*[count(*[self::sons or self::daughters]/*[self::man or self::woman]/*[self::sons or self::daughters]/*[self::man or self::woman]) >= 1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM