我想知道什么是解决这个问题的好方法。我必须清理在一个名称标签中有多个名称的~1000 xml文件。使问题进一步复杂化,名字和姓氏之间没有区别。
基本上我拥有的是:
<name>Li, S.; Wang, K.; Wang, D.</name>
我想要的是这个:
<name>
<given>S.</given>
<family>Li</family>
</name>
等等,其他名称。看起来XSLT并不是真的想以这种方式分离出值,但我可能错了。有没有办法可以做到这一点?任何语言都没问题,我只是不知道从哪里开始。
答案 0 :(得分:0)
今天提出了非常相似的问题,你可以在这里找到答案:
xslt create ordered list from string
编辑:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="name">
<names>
<xsl:for-each select="tokenize (., '; ')[normalize-space()]">
<name>
<given><xsl:value-of select="substring-after(., ', ')"/></given>
<family><xsl:value-of select="substring-before(., ', ')"/></family>
</name>
</xsl:for-each>
</names>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<names>
<name>
<given>S.</given>
<family>Li</family>
</name>
<name>
<given>K.</given>
<family>Wang</family>
</name>
<name>
<given>D.</given>
<family>Wang</family>
</name>
</names>