我有一个csv文件有两个主要案例
案例#1:
“surname,givenName,id#”
案例#2
“organizationName ,, id#”
我正在做一个tokenize函数,在每次回车时将文件分解为文档节点。
<xsl:template match="/">
<!-- tokenize on line endings -->
<xsl:for-each select="str:tokenize(.,' ')">
<document>
<xsl:apply-templates select="." mode="new-document" />
</document>
</xsl:for-each>
</xsl:template>
所以我有这个:
<document>"Don Jackson,,19001"</document>
<document>"Frederick Guitars,,ed55555,,,O"</document>
<document>"Frederick Guitars,,ed11111,,,O"</document>
<document>"A WILLIAMS,JONES THOMPSON,141212"</document>
<document>"A RANJI,ALENA,741152"</document>
现在,我需要在文档节点中创建内容节点,但内容节点的名称将取决于文档节点的结构。基本上,如果第一个逗号后面的文本为空(意味着你得到',,'),那么第一个内容节点的名称将是“组织”。否则,第一个内容节点将被称为“surname”,第二个内容节点的名称将被称为“givenName”。无论如何,第三个节点将是ID_num。
似乎xsl:选择应该在这里工作,但我不知道如何实现它。有人可以提供一些建议吗?
由于
答案 0 :(得分:0)
我模仿但是你得到了你的数据,然后我告诉你如何进行测试你要问的关于区分组织与人的关系。我注意到测试数据似乎没有正确显示姓氏和名字。
t:\ftemp>type rally.xml
<all>
<document>"Don Jackson,,19001"</document>
<document>"Frederick Guitars,,ed55555,,,O"</document>
<document>"Frederick Guitars,,ed11111,,,O"</document>
<document>"A WILLIAMS,JONES THOMPSON,141212"</document>
<document>"A RANJI,ALENA,741152"</document>
</all>
t:\ftemp>call xslt2 rally.xml rally.xsl
<?xml version="1.0" encoding="UTF-8"?>
<document>
<Organization>Don Jackson</Organization>
<ID_num>19001</ID_num>
</document>
<document>
<Organization>Frederick Guitars</Organization>
<ID_num>ed55555</ID_num>
</document>
<document>
<Organization>Frederick Guitars</Organization>
<ID_num>ed11111</ID_num>
</document>
<document>
<surname>A WILLIAMS</surname>
<givenName>JONES THOMPSON</givenName>
<ID_num>141212</ID_num>
</document>
<document>
<surname>A RANJI</surname>
<givenName>ALENA</givenName>
<ID_num>741152</ID_num>
</document>
t:\ftemp>type rally.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="all/document/string(.)">
<document>
<!--old: <xsl:apply-templates select="." mode="new-document" /> -->
<!--new:-->
<xsl:variable name="parts" as="xsd:string*"
select="tokenize(replace(.,'^"(.*)"$','$1'),',')"/>
<xsl:choose>
<xsl:when test="$parts[2]=''">
<Organization><xsl:value-of select="$parts[1]"/></Organization>
<ID_num><xsl:value-of select="$parts[3]"/></ID_num>
</xsl:when>
<xsl:otherwise>
<surname><xsl:value-of select="$parts[1]"/></surname>
<givenName><xsl:value-of select="$parts[2]"/></givenName>
<ID_num><xsl:value-of select="$parts[3]"/></ID_num>
</xsl:otherwise>
</xsl:choose>
</document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>rem Done!
编辑包含id号元素。