XPath:在节点及其后继同级中串联文本

问题描述

我是XSLT和XPath的初学者,主要通过示例学习和从事项目。

我正在尝试串联两个节点的text()内容。对于节点a的每个外观,应将节点text()的{​​{1}}内容与下一个兄弟节点a的{​​{1}}内容连接起来。此连接的内容应与节点text()一样在同一位置注册b新节点text()

示例输入:

foo

预期(希望)输出

a

我当前正在使用的样式表:

<html>
  <body>
    <a>First text</a>
    <b>Text</b>
    <c>Indiferent tag.</c>
    <a>Another "a" test.</a>
    <b>ěščřžýáíéúů</b>
    <c>Another indiferent tag.</c>
  </body>
</html>

只是因为错误的XPath语句而出错。

如何改进样式表以获得所需的结果?

注意:我知道存在以下问题及其答案:HereThis brilliant answer和其他问题,但是在将它们应用于我的具体情况时遇到了麻烦。

此外,对于这个项目,我坚持使用<html> <body> <foo>First text Text</foo> <c>Indiferent tag.</c> <foo>Another "a" test. ěščřžýáíéúů</foo> <c>Another indiferent tag.</c> </body> </html> ;我相信我只能使用XSLT 1.0和XPath 1.0。这些限制是我希望任何足以帮助我遵循的人。但是,我正在学习<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="utf-8"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="html/body/a"> <foo> <xsl:value-of select="concat(text(),folowing-sibling::b[1]/text())"/> </foo> </xsl:template> ,因此从学习的角度来看,使用高级版本的解决方案也是不错的选择。

最后,这只是来自较大HTML文件的示例片段,我正在尝试将其转换为有效的XML(对于我的用例来说很方便),并且涉及很多分组(我需要按键分组) python lxml最终也是如此),因此该解决方案最好使用身份转换重载,这有望使我能够在此示例之后使用它……

解决方法

这是您可以执行此操作的方法。

虽然不确定问题末尾的分组评论,但是...

android:background="@null"

看到它在这里工作:https://xsltfiddle.liberty-development.net/jxDjin9

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...