我完全不熟悉XSLT(Iam使用氧气,XSLT 2.0) 我试图在网上和我的书中找到解决方案,但无法弄明白。
我有以下情况:
我有一个XML(TEI)在段落中有不同的'term'元素。我想用条款做不同的东西,但是@mode它不起作用。
我想给条款一个链接
我想匹配元素'lb /' - &gt; 'lb'在'term'(<term> tex <lb /> t </term>
)内的元素'br /'
我想在我的html中使用'del` dissapear,当它在'term'内
4.如果'term'中的分隔符是“ - ”我想插入我的html'br /'
我的XML摘录(文字毫无意义):
<p>und <term>toxische <lb/>
Quote</term> dabei eine Rolle. – text<term><del>t</del><add rend="overtyped">t</add><del>t</del><add type="overtyped">l</add></term>leicht teilen Sie mir einmal <lb/>
freundlichst Ihre Ansicht mit.</p>
for 4.我用过这个:
<xsl:template match="tei:term">
<xsl:variable name="linktext" select="text()"/>
<a href="https://de.wikipedia.org/wiki/{$linktext}" target="_blank">
<xsl:for-each select="tokenize(.,'-')">
<xsl:sequence select="."/>
<xsl:if test="not(position() eq last())">-<br /></xsl:if>
</xsl:for-each>
</a>
我尝试使用@modes处理其他情况,但它没有用。 有没有人知道如何编码?
提前致谢!!
我想要的结果是以下html代码:
<p> und <a href="href="https://de.wikipedia.org/wiki/toxischeQuote">toxische<br/>
Quote</a> dabei eine Rolle. - text<a href="href="https://de.wikipedia.org/wiki/texttl">
texttl</a> leicht teilen Sie mir einmal <br/> freundlichst Ihre Ansicht mit. </p>
我希望'del'的内容消失。
答案 0 :(得分:1)
我想给条款一个链接
这是:
<xsl:template match="tei:term">
<xsl:variable name="linktext" select="
normalize-space(string-join(.//text()[not(parent::del)], ''))
" /> <!-- ... or something like that -->
<a href="http://de.wikipedia.org/w/index.php?search={encode-for-uri($linktext)}" target="_blank">
<xsl:apply-templates select="node()" />
</a>
</xsl:template>
我想匹配元素
之内时<lb/>
- &gt;<br/>
在<lb/>
<term>
这是:
<xsl:template match="tei:term/tei:lb">
<br />
</xsl:template>
我希望
内的HTML中消失<del>
在<term>
那是
<xsl:template match="tei:term/tei:del" />
并且,你很可能也想要这个:
<xsl:template match="tei:term/tei:add">
<xsl:value-of select="." />
</xsl:template>
如果
<term>
内的分隔符为"-"
,我想在我的html<br/>
中插入
这是
<xsl:template match="tei:term/text()">
<xsl:for-each select="tokenize(., '-')">
<xsl:sequence select="." />
<xsl:if test="not(position() = last())">-<br /></xsl:if>
</xsl:for-each>
</xsl:template>
请注意
<term>
按其出现顺序处理<xsl:apply-templates>
的子节点。然后,通过特定模板轻松实现规则。<term>
encode-for-uri()
功能。答案 1 :(得分:1)
<xsl:template match="tei:term">
<a href="https://de.wikipedia.org/wiki/{.}" target="_blank">
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="tei:term/tei:lb">
<br/>
</xsl:template>
<xsl:template match="tei:term/tei:del"/>
<xsl:template match="tei:term//text()">
<xsl:for-each select="tokenize(.,'-')">
<xsl:sequence select="."/>
<xsl:if test="not(position() eq last())">-<br /></xsl:if>
</xsl:for-each>
</xsl:template>