使用XPath选择仅包含一个属性的元素

时间:2014-12-18 17:19:37

标签: xml xpath

我想只获取XML文件中只包含一个使用XPath的属性的元素。

这是XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<livre titre="Mon livre">
    <auteurs>
        <auteur nom="nom1" prenom="prenom1" />
        <auteur nom="nom2" prenom="prenom2" />
    </auteurs>
    <sections>
        <section titre="Section1">
            <chapitre titre="Chapitre1">
                <paragraphe>Premier paragraphe</paragraphe>
                <paragraphe>Deuxième paragraphe</paragraphe>
            </chapitre>
            <chapitre titre="Chapitre2">
                <paragraphe>Premier paragraphe</paragraphe>
            </chapitre>
        </section>
        <section titre="section2">
            <chapitre titre="Chapitre1">
                <paragraphe>Premier paragraphe</paragraphe>
                <paragraphe>Deuxième paragraphe</paragraphe>
            </chapitre>
        </section>
    </sections>
</livre>

这就是我试图做的事情:

/descendant-or-self::node()[count(self::node()/attribute::node()) = 1]

但它不起作用。

但是我写的XPath查询选择了包含多个属性的所有元素,我只想选择只包含一个属性的元素。

XPath查询的结果应该是这样的:

Description: titre="Mon livre"
XPath location: /livre[1]
Start location: 2:1
End location: 20:9

Description: titre="Section1"
XPath location: /livre[1]/sections[1]/section[1]
Start location: 8:5
End location: 16:19

Description: titre="Chapitre1"
XPath location: /livre[1]/sections[1]/section[1]/chapitre[1]
Start location: 9:13
End location: 12:24

Description: titre="Chapitre2"
XPath location: /livre[1]/sections[1]/section[1]/chapitre[2]
Start location: 13:13
End location: 15:24

Description: titre="section2"
XPath location: /livre[1]/sections[1]/section[2]
Start location: 17:9
End location: 18:19

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这应该有效:

//*[count(@*)=1]

p.s。,我得到6个项目,对于该数据,chapitre下还有另一个section2