如何解析xml节点内的值并在其他xml节点中打印它们

时间:2015-02-27 13:58:43

标签: xml xslt

我想知道什么是解决这个问题的好方法。我必须清理在一个名称标签中有多个名称的~1000 xml文件。使问题进一步复杂化,名字和姓氏之间没有区别。

基本上我拥有的是:

<name>Li, S.; Wang, K.; Wang, D.</name>

我想要的是这个:

<name>
 <given>S.</given>
 <family>Li</family>
</name>

等等,其他名称。看起来XSLT并不是真的想以这种方式分离出值,但我可能错了。有没有办法可以做到这一点?任何语言都没问题,我只是不知道从哪里开始。

1 个答案:

答案 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>