Xml 在第n次出现特殊字符之间提取文件中的文本
我试图找出如何从XML中的一个节点提取一些信息,其中的信息位于答案中的第二个和第三个“|”之间。。。 因为所包含的单词的长度可能不同,所以唯一的常量是“|”Xml 在第n次出现特殊字符之间提取文件中的文本,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我试图找出如何从XML中的一个节点提取一些信息,其中的信息位于答案中的第二个和第三个“|”之间。。。 因为所包含的单词的长度可能不同,所以唯一的常量是“|” 苹果|梨|橙|无花果|樱桃|香蕉 我已经看过这个类似主题的例子,但它并不能完全回答在两个已知字符之间找到第n个字符的情况 因此,我希望找到“Orange”作为我的答案,无论您在数组的其余部分将其他名称更改为什么 对于较低的n值(例如示例中的3),可以使用: <xsl:value-of select="substring-befor
苹果|梨|橙|无花果|樱桃|香蕉
我已经看过这个类似主题的例子,但它并不能完全回答在两个已知字符之间找到第n个字符的情况
因此,我希望找到“Orange”作为我的答案,无论您在数组的其余部分将其他名称更改为什么
<xsl:value-of select="substring-before(substring-after(substring-after(item, '|'), '|'), '|')"/>
<xsl:value-of select="substring-before(substring-after(substring-after(item, '|'), '|'), '|')"/>
如果数据真的这么简单,请使用
awk-F'|'''''/^[如果数据真的这么简单,请使用awk-F'|''''.'/^[好了,我终于实现了这一点,我能够使用@michael-hor257k中的选项3,这太棒了,只需要在我的命名空间中添加以下项xmlns:str=”http://exslt.org/strings"extension element prefixes=“str”
然后使用您的
这里是str:tokenize()的一个有趣的扭曲,如果您有一个数组,其中包含“|”作为分隔符,并且您有| |作为答案,那么tokenize不包括那个空白或“null”答案。我偶尔有一个数组可以是“apple | pear | lemon”
和另一个可以是“apple | pear | orange | lemon”
,这意味着调用
可以产生柠檬或橙色。有人对如何防止这种情况提出了建议吗?有没有办法使标记化包含“null”条目?@AlistairLindsay Macfadyen您已经得到了替代方案。好了,我终于开始实施这一方案,我能够使用@michael-hor257k中的选项3,这太棒了,只需要在我的命名空间xmlns:str=”中添加以下项http://exslt.org/strings“扩展元素前缀=“str”
然后使用您的
这里是str:tokenize()的一个有趣的转折点,如果您有一个数组,其中包含“|”作为分隔符,并且您有| |作为答案,那么tokenize不包括那个空白或“null”答案。我偶尔有一个数组可以是“apple | pear | lemon”
,另一个可以是“apple | pear | orange | lemon”
,这意味着调用
可以生成柠檬或橙色。有人对此提出了保护建议吗?有没有办法使标记化包含“null”条目?@AlistairLindsay Macfadyen您已经得到了替代方案。
<xsl:template name="get-Nth-value">
<xsl:param name="list"/>
<xsl:param name="N"/>
<xsl:param name="delimiter" select="'|'"/>
<xsl:choose>
<xsl:when test="$N = 1">
<xsl:value-of select="substring-before(concat($list, $delimiter), $delimiter)"/>
</xsl:when>
<xsl:when test="contains($list, $delimiter) and $N > 1">
<!-- recursive call -->
<xsl:call-template name="get-Nth-value">
<xsl:with-param name="list" select="substring-after($list, $delimiter)"/>
<xsl:with-param name="N" select="$N - 1"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="item">
<xsl:copy>
<xsl:call-template name="get-Nth-value">
<xsl:with-param name="list" select="."/>
<xsl:with-param name="N" select="3"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:value-of select="str:tokenize(item, '|')[3]" />