【发布时间】:2017-03-17 13:44:35
【问题描述】:
我有一个这样的 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 叶兄弟姐妹。
任何帮助将不胜感激。
【问题讨论】:
-
.//*[count(child::) = 2]? -
这个没用。感谢您的尝试