Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 XSLT:检查序列中的元素忽略大小写-如果必须删除当前节点_Xml_Xslt - Fatal编程技术网

Xml XSLT:检查序列中的元素忽略大小写-如果必须删除当前节点

Xml XSLT:检查序列中的元素忽略大小写-如果必须删除当前节点,xml,xslt,Xml,Xslt,输入XML结构: <ITEMS> <ITEM> <ITEMTYPE>FOO</ITEMTYPE> </ITEM> <ITEM> <ITEMTYPE>BAR</ITEMTYPE> </ITEM> </ITEMS> 福 酒吧 我将把序列作为参数传递给XSLT。如果序列中存在ITEMTYPE,则必须删除节点。而且它必须以不区分大小

输入XML结构:

<ITEMS>
   <ITEM>
      <ITEMTYPE>FOO</ITEMTYPE>
   </ITEM>
   <ITEM>
      <ITEMTYPE>BAR</ITEMTYPE>
   </ITEM>
</ITEMS>

福
酒吧
我将把序列作为参数传递给XSLT。如果序列中存在ITEMTYPE,则必须删除节点。而且它必须以不区分大小写的方式处理

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fn="http://www.w3.org/2005/xpath-functions"
                exclude-result-prefixes="#all">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:param name="itemsToRemove"/>


    <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ITEM">
        <xsl:variable name="currentItemType">
            <xsl:value-of select="itemType"/>
        </xsl:variable>
        <xsl:if test="not(fn:index-of($itemsToRemove, $currentItemType))">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>
我是XSLT的新手。我编写了如下代码,但无法破解不区分大小写的代码

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fn="http://www.w3.org/2005/xpath-functions"
                exclude-result-prefixes="#all">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:param name="itemsToRemove"/>


    <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ITEM">
        <xsl:variable name="currentItemType">
            <xsl:value-of select="itemType"/>
        </xsl:variable>
        <xsl:if test="not(fn:index-of($itemsToRemove, $currentItemType))">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

如果要使用不区分大小写的值比较,一种方法是使用带有
i
标志的
匹配
函数:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:param name="itemsToRemove" select="'foo'"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ITEM[$itemsToRemove[matches(., current()/ITEMTYPE, 'i')]]"/>
</xsl:transform>

然后是输出

<ITEMS>

   <ITEM>
      <ITEMTYPE>BAR</ITEMTYPE>
   </ITEM>
</ITEMS>

酒吧

如果要使用不区分大小写的值比较,一种方法是使用带有
i
标志的
匹配
函数:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:param name="itemsToRemove" select="'foo'"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ITEM[$itemsToRemove[matches(., current()/ITEMTYPE, 'i')]]"/>
</xsl:transform>

然后是输出

<ITEMS>

   <ITEM>
      <ITEMTYPE>BAR</ITEMTYPE>
   </ITEM>
</ITEMS>

酒吧

什么必须不区分大小写,比较
ITEMTYPE
的值,或者元素的名称(就像XML中的
ITEMTYPE
但是XSLT中的
ITEMTYPE
一样)?什么必须不区分大小写,比较
ITEMTYPE
的值,或者元素的名称(正如XML中有
ITEMTYPE
,但XSLT中有
ITEMTYPE
)函数当前应该在编译时解析(java.lang.IllegalStateException)net.sf.saxon.functions.CompileTimeFunction:41(null)@Martin Honnen:当我从java程序运行时,我遇到了这个错误。当你遇到这个错误时,你能告诉我们你到底在使用哪个版本的Saxon吗?当你从命令行运行这个版本的代码时,是否也会发生这种情况?你可能需要创建一个新的问题,在其中显示所有细节以允许其他人使用若要重现此问题,应在编译时(java.lang.IllegalStateException)net.sf.saxon.functions.CompileTimeFunction:41(null)解决当前函数@Martin Honnen:当我从java程序运行时,我遇到了这个错误。当你遇到这个错误时,你能告诉我们你到底在使用哪个版本的Saxon吗?当你从命令行运行这个版本的代码时,是否也会发生这种情况?你可能需要创建一个新的问题,在其中显示所有细节以允许其他人使用重现问题。