我有一个XML:
<root>
<entry id="1">
<content>TEXT</content>
</entry>
<entry id="2">
<content>TEXT</content>
</entry>
<entry id="3">
<content>TEXT</content>
</entry>
<root>
我如何转换它(使用xslt)以便在1行上拥有所有“条目”,例如:
<root>
<entry id="1"><content>TEXT</content></entry>
<entry id="2"><content>TEXT</content></entry>
<entry id="3"><content>TEXT</content></entry>
<root>
感谢您的想法
答案 0 :(得分:1)
正如我在上面的评论中所说,XML布局对你来说无关紧要。任何使用XML的应用程序都应该只关心DOM树,而不关心XML源布局。添加或删除无关紧要的空白区域不得破坏任何内容或改变任何行为。
如果你真的那么肯定,那么你可以使用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="entry/text()[normalize-space() = '']" />
<xsl:template match="text()[
normalize-space() = ''
and preceding-sibling::*[1][self::entry]
and following-sibling::*[1][self::entry]
]">
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
虽然这会生成所需的XML,但它实际上是一个无用的无操作,只有学术价值,显示了一些你可以用XPath做的事情。请不要实际这样做。
答案 1 :(得分:1)
最简单的方法可能就是使用xsl:strip-spaces指令从传入的XML文档中去除空格:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
exclude-result-prefixes="xs saxon" >
<xsl:strip-space elements="entry"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这种工作原理将取决于您如何序列化输出XML。