使用xslt 3,我需要获取所有内容元素的值,并将它们移动到title元素(如果title元素已经存在于记录中,则需要附加类似于-)的分隔符),我现在已经输入了实际数据,因为下面的解决方案在实现时不会解决问题,比如:示例输入:
<data>
<RECORD ID="31365">
<no>25099</no>
<seq>0</seq>
<date>2/4/2012</date>
<ver>2/4/2012</ver>
<access>021999</access>
<col>GS</col>
<call>889</call>
<pr>0</pr>
<days>0</days>
<stat>0</stat>
<ch>0</ch>
<title>1 title</title>
<content>1 content</content>
<sj>1956</sj>
</RECORD>
<RECORD ID="31366">
<no>25100</no>
<seq>0</seq>
<date>2/4/2012</date>
<ver>2/4/2012</ver>
<access>022004</access>
<col>GS</col>
<call>8764</call>
<pr>0</pr>
<days>0</days>
<stat>0</stat>
<ch>0</ch>
<sj>1956</sj>
<content>1 title</content>
</RECORD>
</data>
expected output:
<data>
<RECORD ID="31365">
<no>25099</no>
<seq>0</seq>
<date>2/4/2012</date>
<ver>2/4/2012</ver>
<access>021999</access>
<col>GS</col>
<call>889</call>
<pr>0</pr>
<days>0</days>
<stat>0</stat>
<ch>0</ch>
<title>1 title - 1 content</title>
<sj>1956</sj>
</RECORD>
<RECORD ID="31366">
<no>25100</no>
<seq>0</seq>
<date>2/4/2012</date>
<ver>2/4/2012</ver>
<access>022004</access>
<col>ΓΣ</col>
<call>8764</call>
<pr>0</pr>
<days>0</days>
<stat>0</stat>
<ch>0</ch>
<sj>1956</sj>
<title>1 title</title>
</RECORD>
<data>在我的尝试中,我没有移动元素,我只是得到了一个空行,其中存在content元素,所以请在建议的解决方案中添加空行删除。
我相信删除空白行可以通过使用
<xsl:template match="text()"/>发布于 2020-07-09 15:27:15
实现这一目标的一种方法是以下模板。它使用XSLT3.0内容值模板。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" expand-text="true">
<xsl:output method="xml" indent="yes" />
<xsl:mode on-no-match="shallow-copy" />
<xsl:strip-space elements="*" /> <!-- Remove space between elements -->
<xsl:template match="RECORD">
<xsl:copy>
<xsl:copy-of select="@*" />
<title>{title[1]}{if (title[1]) then ' - ' else ''}<xsl:value-of select="content" separator=" " /></title>
<xsl:apply-templates select="node() except (title,content)" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>它的输出是理想的。
如果您也希望将<content>元素与-分开,则可以将核心<title>表达式简化为
<xsl:value-of select="title|content" separator=" - " />编辑:
我所改变的只是用RECORD代替RECORD,它在Saxon 9.9.1.4J中运行得很好。输出的唯一区别是title元素总是位于第一个位置,但这并不重要。我还添加了一个指令来删除元素之间的空间。
https://stackoverflow.com/questions/62817813
复制相似问题