如何在XPath中连接节点所有子节点的内容?
使用XPath是否可以获得节点所有子节点的连接视图?我正在寻找类似JQuery.html()方法的东西 例如,如果我有以下XML:如何在XPath中连接节点所有子节点的内容?,xpath,Xpath,使用XPath是否可以获得节点所有子节点的连接视图?我正在寻找类似JQuery.html()方法的东西 例如,如果我有以下XML: <h3 class="title"> <span class="content">this</span> <span class="content"> is</span> <span class="content"> some</span> <s
<h3 class="title">
<span class="content">this</span>
<span class="content"> is</span>
<span class="content"> some</span>
<span class="content"> text</span>
</h3>
像这样
h3[@class='title']/descendant::*/text()
还是这个?是的,这似乎有帮助,但它扭转了我的问题。现在,它将拾取“Title 2 is complex”中的文本,但不会拾取没有跨距的“Title”中的文本。是否有XPath可以同时处理这两个问题?最糟糕的是,目前只有跨距,但实际上可能有任何标记。我真的很希望有一个解决方案可以从任何标签中提取文本。一个新的解决方案:这将提取所有后代的内容(递归!)啊!解决方案似乎是您的建议,使用//运算符代替span(它将从当前节点中选择与选择匹配的节点,无论它们位于何处)。这似乎奏效了。似乎我无法在注释中放入代码片段,但select子句的h3部分现在看起来是这样的:h3[1][@class='title'][//text()=current()//text()])。我在XSL中尝试了子体解决方案,它与/span…/text()选项具有相同的效果。它与复杂标题匹配,但与简单标题不匹配。似乎//text()是唯一一个同时匹配这两个元素的。如果元素没有子元素,最好使用
后代或self
来检索元素本身的文本。已添加完整样式表以响应添加的完整所需输出。这是一个方便的工具(适用于具有类似任务的任何其他人)
<xsl:template match="h3[@class='title']">
...
<xsl:apply-templates select="following-sibling::p[
generate-id(preceding-sibling::h3[1][@class='title'][text()=current()/text()])
=
generate-id(current())
]"/>
...
</xsl:template>
<section>
<title>Title</title>
<p>
<content>Some</content>
<content> text</content>
<content> for</content>
<content> this</content>
<content> section</content>
</p>
<p>
<content>Another</content>
<content> paragraph</content>
</p>
</section>
<section>
<title>
<content>Title</content>
<content> 2</content>
<content> is</content>
<content> complex</content>
</title>
<p>
<content>Here</content>
<content> is</content>
<content> some</content>
<content> text</content>
</p>
</section>
h3[@class='title']/span[@class='content']/text()
h3[@class='title']/descendant::*/text()