我有这样的XML:
<?xml version="1.0" encoding="UTF-8"?>
<Math mode="inline" tex="\tilde{p}_{d}\leq\tilde{p}_{d+1}" text="(tilde@(p)) _ d less= (tilde@(p)) _ (d + 1)">
<RMath>
<RApp>
<RTok meaning="less-than-or-equals" name="leq" role="RELOP">?</RTok>
<RApp>
<RTok role="SUBSCRIPTOP" scriptpos="post2"/>
<RApp>
<RTok name="tilde" role="OVERACCENT" stretchy="false">~</RTok>
<RTok role="UNKNOWN" font="italic">p</RTok>
</RApp>
<RTok role="UNKNOWN" font="italic">d</RTok>
</RApp>
<RApp>
<RTok role="SUBSCRIPTOP" scriptpos="post2"/>
<RApp>
<RTok name="tilde" role="OVERACCENT" stretchy="false">~</RTok>
<RTok role="UNKNOWN" font="italic">p</RTok>
</RApp>
<RApp>
<RTok meaning="plus" role="ADDOP">+</RTok>
<RTok role="UNKNOWN" font="italic">d</RTok>
<RTok meaning="1" role="NUMBER">1</RTok>
</RApp>
</RApp>
</RApp>
</RMath>
</Math>
我想使用XPath来提取具有2个子节点的节点,其中2个子节点是叶节点,例如:
<RApp>
<RTok name="tilde" role="OVERACCENT" stretchy="false">~</RTok>
<RTok role="UNKNOWN" font="italic">p</RTok>
</RApp>
我无法想到这种提取的适当谓词。
我知道.//*[not(child::*)]
找到所有叶子节点。
和//*[not(child::*) and (ancestor-or-self::XMApp)]
将找到所有具有祖先标记RApp
的叶节点。
我不想要节点(RApp)但只想要它的孩子?即任何没有任何其他兄弟姐妹的2叶子兄弟。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以尝试以下方法获得理想的输出:
//RApp[count(child::*)=2 and count(child::RTok)=2]
如果两个子元素都是RApp
RTok
个元素
答案 1 :(得分:0)
.//*[not(*/*) and count(*) = 2]
我能想到的更具可读性:
似乎是你的“有2个孩子的节点”。
对于好奇心,.//*[count(.//*[not(*)]) = 2]
将匹配“正好有2个后代[子女和子孩子]的节点”