两条处理指令之间是否只有文本?
Is there only text between two processing instructions?
这是我的 XML 文件:
<root>
<?pistart ?>
<elt>
<?pistop ?>
</elt>
</root>
现在(使用 XPath 2.0)我想知道处理指令 pistart
和下一个处理指令 pistop
之间是否只有文本。上面的答案是 'no, there is an start element tag'。
如果没有相应的 pistop
,pistart
永远不会在另一个 pistart
之后出现。因此这是不可能的(如果它有助于解决我的问题):
<root>
<?pistart ?>
<elt>
<?pistart ?>
<?pistop ?>
</elt>
<?pistop ?>
</root>
根据我评论中的建议,我认为
<xsl:template match="/">
<xsl:for-each-group select="/root//node()"
group-starting-with="processing-instruction('pistart')">
<xsl:if test="self::processing-instruction('pistart')">
<xsl:variable name="end" select="current-group()[self::processing-instruction('pistop')]"/>
<xsl:value-of
select="
every $group-member in current-group()[position() gt 1 and . << $end]
satisfies $group-member instance of text()"
/>
</xsl:if>
</xsl:for-each-group>
</xsl:template>
将对满足条件的任何一组 pi 对输出 true
,对不满足条件的 pi 对输出 false。
嵌套一个额外的 for-each-group group-ending-with="processing-instruction('pistop')"
来抓取要检查的节点可能更容易。
也许(假设 pistart 是上下文项):
exists(following-sibling::node()[1][self::text()]
/following-sibling::node()[1][self::processing-instruction(pistop))
使用这个 XPath 1.0 表达式(当然,它也是一个 XPath 2.0 表达式)
假设 pistart 是上下文项:
boolean(following::node()[not(self::text())][1][self::processing-instruction('pistop')])
这是我的 XML 文件:
<root>
<?pistart ?>
<elt>
<?pistop ?>
</elt>
</root>
现在(使用 XPath 2.0)我想知道处理指令 pistart
和下一个处理指令 pistop
之间是否只有文本。上面的答案是 'no, there is an start element tag'。
如果没有相应的 pistop
,pistart
永远不会在另一个 pistart
之后出现。因此这是不可能的(如果它有助于解决我的问题):
<root>
<?pistart ?>
<elt>
<?pistart ?>
<?pistop ?>
</elt>
<?pistop ?>
</root>
根据我评论中的建议,我认为
<xsl:template match="/">
<xsl:for-each-group select="/root//node()"
group-starting-with="processing-instruction('pistart')">
<xsl:if test="self::processing-instruction('pistart')">
<xsl:variable name="end" select="current-group()[self::processing-instruction('pistop')]"/>
<xsl:value-of
select="
every $group-member in current-group()[position() gt 1 and . << $end]
satisfies $group-member instance of text()"
/>
</xsl:if>
</xsl:for-each-group>
</xsl:template>
将对满足条件的任何一组 pi 对输出 true
,对不满足条件的 pi 对输出 false。
嵌套一个额外的 for-each-group group-ending-with="processing-instruction('pistop')"
来抓取要检查的节点可能更容易。
也许(假设 pistart 是上下文项):
exists(following-sibling::node()[1][self::text()]
/following-sibling::node()[1][self::processing-instruction(pistop))
使用这个 XPath 1.0 表达式(当然,它也是一个 XPath 2.0 表达式)
假设 pistart 是上下文项:
boolean(following::node()[not(self::text())][1][self::processing-instruction('pistop')])