尝试使用XSLT转换XML,但输出行中断。
这是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:template match="/" >
<data>
<content>
<xsl:for-each select="//t[@pos='ADV' or @pos='ADJD' or @pos='ADJA' or @pos='NE' or
@pos='NN' or @pos='VMFIN' or @pos='VVINF' or @pos='VAFIN' or
@pos='VVPP' or @pos='VVFIN']">
<xsl:sort select="@word"/>
<token>
<xsl:value-of select="@word"/>
(<xsl:value-of select="@lemma"/>;
<xsl:value-of select="@pos"/>;
<xsl:value-of select="@morph"/>)
</token>
</xsl:for-each>
</content>
</data>
</xsl:template>
</xsl:stylesheet>
我将此作为输出:
<?xml version="1.0" encoding="utf-8"?><data><content><token>Aktivitäten
(Aktivität;
NN;
Acc.Pl.Fem)
</token><token>Bank
(Bank;
NN;
Dat.Sg.Fem)
</token><token>Behörden
(Behörde;
NN;
Dat.Pl.Fem)
</token>
我试图复制此输出结果
<?xml version="1.0" encoding="UTF-8"?>
<data>
<content>
<token>Aktivitäten(Aktivität;NN;Acc.Pl.Fem)</token>
<token>Bank(Bank;NN;Dat.Sg.Fem)</token>
<token>Behörden(Behörde;NN;Dat.Pl.Fem)</token>
etc...
我是XSLT的新手,感谢您的帮助
答案 0 :(得分:3)
当与(
,;
和)
等其他文字文本相邻时,通常无关紧要的空白区域变得非常重要。
如果你在xsl:text
,
<xsl:value-of select="@word"/>
<xsl:text>(</xsl:text>
<xsl:value-of select="@lemma"/>
<xsl:text>;<xsl:text>
...
您将获得所需的XML输出。
[感谢@Tomalak]消除不需要的空格的另一种方法是将字符串值连接在一个xsl:value-of
中:
<xsl:value-of select="concat(@word, '(', @lemma, ';', @pos, ';', @morph, ')')" />
答案 1 :(得分:1)
让我们从输出的开头开始:
<?xml version="1.0" encoding="utf-8"?><data><content><token>
这是默认输出indent
属性设置为no
的结果。
此设置的原因是,如果不读取输出XML
人类,当它不包含额外的空间时,它的处理速度更快
和换行符。
您的token
输出标记具有“其他”换行符和空格的原因
是它们实际上包含在你的脚本中。
查看脚本的以下片段:
<xsl:value-of select="@word"/>
(<xsl:value-of select="@lemma"/>;
在<xsl:value-of select="@word"/>
脚本包含文本标记后,
含有:
(
- 唯一真正应该打印的东西。要获得所需的结果,请进行2次更改:
xsl:stylesheet
打开代码后,添加<xsl:output indent="yes"/>
。token
将xsl:value-of
的内容更改为单个select="concat(...)"
将所有内容打印为concat
函数的参数。有关工作示例,请参阅http://xsltransform.net/aiwQ3T