Xpath:如何获取所选节点的父节点?

时间:2013-03-20 22:43:09

标签: xml xpath

我在获取所选节点的父节点时遇到问题。 我正在使用查询:/ / t [@ lemma =“de”]。 但我想获得包含的元素。 我对xpath了解不多。 现在我正在使用两个查询来尝试解决问题,但我认为没有必要。 我的xml:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
    <corpus> 
        <body>
            <s id="s16" ref="16" source="Running text" forest="1" text="DECLARARAL A Extinção da Punibilidade do Réu, Em Razão da Prescrição da Pretensão Punitiva, Fulcro Em os ARTIGOS 107, Inciso IV, Combinado Com O ARTIGO 109, Inciso VI (Redação Anterior à Lei Nº.">
                <graph root="s16_500">
                    <terminals>
                        <t id="s16_1" word="DECLARARAL" lemma="DECLARARAL" pos="prop" morph="--" extra="cjt-head cjt-head-X" />
                        <t id="s16_2" word="A" lemma="o" pos="art" morph="F S" extra="artd" />
                        <t id="s16_3" word="Extinção" lemma="Extinção" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_4" word="de" lemma="de" pos="prp" morph="--" extra="sam-" />
                        <t id="s16_5" word="a" lemma="o" pos="art" morph="F S" extra="-sam artd" />
                        <t id="s16_6" word="Punibilidade" lemma="punibilidade" pos="n" morph="F S" extra="prop percep-f" />
                        <t id="s16_7" word="de" lemma="de" pos="prp" morph="--" extra="sam-" />
                        <t id="s16_8" word="o" lemma="o" pos="art" morph="M S" extra="-sam artd" />
                        <t id="s16_9" word="Réu" lemma="réu" pos="n" morph="M S" extra="prop H" />
                        <t id="s16_10" word="," lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_11" word="Em_Razão" lemma="Em_Razão" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_12" word="de" lemma="de" pos="prp" morph="--" extra="sam-" />
                        <t id="s16_13" word="a" lemma="o" pos="art" morph="F S" extra="-sam artd" />
                        <t id="s16_14" word="Prescrição" lemma="prescrição" pos="n" morph="F S" extra="prop conv" />
                        <t id="s16_15" word="de" lemma="de" pos="prp" morph="--" extra="sam-" />
                        <t id="s16_16" word="a" lemma="o" pos="art" morph="F S" extra="-sam artd" />
                        <t id="s16_17" word="Pretensão_Punitiva" lemma="Pretensão_Punitiva" pos="prop" morph="--" extra="--" />
                        <t id="s16_18" word="," lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_19" word="Fulcro" lemma="fulcro" pos="n" morph="M S" extra="cjt-X part-build Labs" />
                        <t id="s16_20" word="Em" lemma="em" pos="prp" morph="--" extra="sam-" />
                        <t id="s16_21" word="os" lemma="o" pos="art" morph="M P" extra="artd -sam" />
                        <t id="s16_22" word="ARTIGOS_107" lemma="ARTIGOS_107" pos="prop" morph="--" extra="--" />
                        <t id="s16_23" word="," lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_24" word="Inciso_IV" lemma="Inciso_IV" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_25" word="," lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_26" word="Combinado_Com" lemma="Combinado_Com" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_27" word="O" lemma="o" pos="art" morph="M S" extra="artd" />
                        <t id="s16_28" word="ARTIGO_109" lemma="ARTIGO_109" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_29" word="," lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_30" word="Inciso_VI" lemma="Inciso_VI" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_31" word="(" lemma="--" pos="pu" morph="--" extra="--" />
                        <t id="s16_32" word="Redação_Anterior_Ã_Lei_Nº" lemma="Redação_Anterior_Ã_Lei_Nº" pos="prop" morph="--" extra="cjt-X" />
                        <t id="s16_33" word="." lemma="--" pos="pu" morph="--" extra="--" />
                    </terminals>

                    <nonterminals>
                        <nt id="s16_500" cat="s">
                            <edge label="X" idref="s16_501" />
                        </nt>
                        <nt id="s16_501" cat="par">
                            <edge label="CJT" idref="s16_1" />
                            <edge label="CJT" idref="s16_502" />
                            <edge label="PU" idref="s16_10" />
                            <edge label="CJT" idref="s16_507" />
                            <edge label="PU" idref="s16_18" />
                            <edge label="CJT" idref="s16_512" />
                            <edge label="PU" idref="s16_23" />
                            <edge label="CJT" idref="s16_24" />
                            <edge label="PU" idref="s16_25" />
                            <edge label="CJT" idref="s16_26" />
                            <edge label="CJT" idref="s16_515" />
                            <edge label="PU" idref="s16_29" />
                            <edge label="CJT" idref="s16_30" />
                            <edge label="PU" idref="s16_31" />
                            <edge label="CJT" idref="s16_32" />
                            <edge label="PU" idref="s16_33" />
                        </nt>
                        <nt id="s16_502" cat="np">
                            <edge label="DN" idref="s16_2" />
                            <edge label="H" idref="s16_3" />
                            <edge label="DN" idref="s16_503" />
                        </nt>
                        <nt id="s16_503" cat="pp">
                            <edge label="H" idref="s16_4" />
                            <edge label="DP" idref="s16_504" />
                        </nt>
                        <nt id="s16_504" cat="np">
                            <edge label="DN" idref="s16_5" />
                            <edge label="H" idref="s16_6" />
                            <edge label="DN" idref="s16_505" />
                        </nt>
                        <nt id="s16_505" cat="pp">
                            <edge label="H" idref="s16_7" />
                            <edge label="DP" idref="s16_506" />
                        </nt>
                        <nt id="s16_506" cat="np">
                            <edge label="DN" idref="s16_8" />
                            <edge label="H" idref="s16_9" />
                        </nt>
                        <nt id="s16_507" cat="np">
                            <edge label="H" idref="s16_11" />
                            <edge label="DN" idref="s16_508" />
                        </nt>
                        <nt id="s16_508" cat="pp">
                            <edge label="H" idref="s16_12" />
                            <edge label="DP" idref="s16_509" />
                        </nt>
                        <nt id="s16_509" cat="np">
                            <edge label="DN" idref="s16_13" />
                            <edge label="H" idref="s16_14" />
                            <edge label="DN" idref="s16_510" />
                        </nt>
                        <nt id="s16_510" cat="pp">
                            <edge label="H" idref="s16_15" />
                            <edge label="DP" idref="s16_511" />
                        </nt>
                        <nt id="s16_511" cat="np">
                            <edge label="DN" idref="s16_16" />
                            <edge label="H" idref="s16_17" />
                        </nt>
                        <nt id="s16_512" cat="np">
                            <edge label="H" idref="s16_19" />
                            <edge label="DN" idref="s16_513" />
                        </nt>
                        <nt id="s16_513" cat="pp">
                            <edge label="H" idref="s16_20" />
                            <edge label="DP" idref="s16_514" />
                        </nt>
                        <nt id="s16_514" cat="np">
                            <edge label="DN" idref="s16_21" />
                            <edge label="H" idref="s16_22" />
                        </nt>
                        <nt id="s16_515" cat="np">
                            <edge label="DN" idref="s16_27" />
                            <edge label="H" idref="s16_28" />
                        </nt>
                    </nonterminals>
                </graph> 
            </s>
        </body>
    </corpus>
</xml>

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您可以像这样获取父节点:

//t[@lemma="de"]/..

就像Unix shell:

cd ..

代表父级目录的更改目录

答案 1 :(得分:0)

来自你的评论:

  

我需要的是<s>

条件下的标记t[@lemma = 'de']

在这种情况下,您需要的是

//s[graph/terminals/t/@lemma = 'de']

如果集合中的任何节点具有所需值,则=一边是节点集的比较成功。