Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个分隔符拆分XML数据_Xml_Parsing_Xslt_Tokenize_Delimiter - Fatal编程技术网

使用多个分隔符拆分XML数据

使用多个分隔符拆分XML数据,xml,parsing,xslt,tokenize,delimiter,Xml,Parsing,Xslt,Tokenize,Delimiter,我有一个XML标记,其中包含一个项目列表,使用多个分隔符,例如: 1;黑色颜色;Smart,2;白色颜色;电视,3;黄色的;枕头;主页 我需要使用XSLT(首选2.0)将值拆分为以下形式: <LIST> <LIST_ITEM id="1" value="Black" type="Colour" usedIn="Smart"/> <LIST_ITEM id="2" value="White" type="Colour" usedIn="TV"/> <

我有一个XML标记,其中包含一个项目列表,使用多个分隔符,例如:

1;黑色颜色;Smart,2;白色颜色;电视,3;黄色的;枕头;主页

我需要使用XSLT(首选2.0)将值拆分为以下形式:

<LIST>
 <LIST_ITEM id="1" value="Black" type="Colour" usedIn="Smart"/>
 <LIST_ITEM id="2" value="White" type="Colour" usedIn="TV"/>
 <LIST_ITEM id="3" value="Yellow" type="Pillow" usedIn="Home"/>
</LIST>

分隔符是:
用于单独的列表项和
用于单独的条目。每个列表项中只有4个值

我猜tokenize()是实现这一点最有效的方法,但不确定如何实现。有人能帮我吗?

这是一个示例:

<xsl:stylesheet
  version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs">

<xsl:output indent="yes"/>

<xsl:template match="List">
  <LIST>
    <xsl:for-each select="tokenize(., ',')">
      <xsl:variable name="items" select="tokenize(., ';')"/>
      <LIST_ITEM id="{$items[1]}" value="{$items[2]}" type="{$items[3]}" usedIn="{$items[4]}"/>
    </xsl:for-each>
  </LIST>
</xsl:template>

</xsl:stylesheet>


它首先在逗号上标记,在分号上标记。

如果我要声明此模板,并从对象中调用它,我该怎么做?如果在XSLT中不调用此类模板,您可以使用
xsl:apply templates
将它们推送到XSLT处理器。但是内置的模板为您完成了这项工作,所以上面的代码是完整的。我不知道在XSLT上下文中“从对象中调用它”应该是什么意思。你需要解释一下。好吧,我去掉了模板,它成功了。我还使用了其他属性。谢谢!