Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 在第n次出现特殊字符之间提取文件中的文本_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

Xml 在第n次出现特殊字符之间提取文件中的文本

Xml 在第n次出现特殊字符之间提取文件中的文本,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我试图找出如何从XML中的一个节点提取一些信息,其中的信息位于答案中的第二个和第三个“|”之间。。。 因为所包含的单词的长度可能不同,所以唯一的常量是“|” 苹果|梨|橙|无花果|樱桃|香蕉 我已经看过这个类似主题的例子,但它并不能完全回答在两个已知字符之间找到第n个字符的情况 因此,我希望找到“Orange”作为我的答案,无论您在数组的其余部分将其他名称更改为什么 对于较低的n值(例如示例中的3),可以使用: <xsl:value-of select="substring-befor

我试图找出如何从XML中的一个节点提取一些信息,其中的信息位于答案中的第二个和第三个“|”之间。。。 因为所包含的单词的长度可能不同,所以唯一的常量是“|”


苹果|梨|橙|无花果|樱桃|香蕉
我已经看过这个类似主题的例子,但它并不能完全回答在两个已知字符之间找到第n个字符的情况

因此,我希望找到“Orange”作为我的答案,无论您在数组的其余部分将其他名称更改为什么

  • 对于较低的n值(例如示例中的3),可以使用:

    <xsl:value-of select="substring-before(substring-after(substring-after(item, '|'), '|'), '|')"/>
    
  • 对于较低的n值(例如示例中的3),可以使用:

    <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]" />