首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT-XPath:检查列表中是否存在值

XSLT-XPath:检查列表中是否存在值
EN

Stack Overflow用户
提问于 2013-09-12 22:27:59
回答 1查看 5K关注 0票数 0

我看到了一些不同的检查列表(重复的XML变量)中是否存在值(节点)的方法的例子,但是由于某些原因,我无法确定我需要使用的Xpath语句的确切语法。我有一个XML文档,它是发票行列表,另一个XML文档是错误行列表。如果第一个文档中的值存在于第二个文档中,则需要将/替换为"X“值,否则保留空白。

这里是一个示例输入文档

Input1

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<UPSOutboundFlatFileSchema>
    <data>
        <processFlag>1</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag>2</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag>3</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag>4</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
</UPSOutboundFlatFileSchema>

Input2

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<rows>
    <row>
        <LineNumber>2</LineNumber>
    </row>
    <row>
        <LineNumber>3</LineNumber>
    </row>
</rows>

输出文件

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<UPSOutboundFlatFileSchema>
    <data>
        <processFlag></processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag>X</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag>X</processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
    <data>
        <processFlag></processFlag>
        <field1>...</field1>
        <field2>...</field2>
    </data>
</UPSOutboundFlatFileSchema>

下面是我到目前为止所使用的XSLT,我只是无法获得第一个“何时测试=”正确的XPath语句.

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output indent="yes"/>
    <xsl:variable name="rejectLines" select="bpws:getVariableData('UPSDataRejectLineNumbers')"/>
    <xsl:variable name="input" select="/"/>

    <xsl:template match="/">

        <xsl:element name="UPSOutboundFlatFileSchema">    
            <xsl:for-each select="$input/*:UPSOutboundFlatFileSchema/*:data">
                <xsl:element name="data">
                    <xsl:choose>
                        <xsl:when test="boolean($rejectLines/*:rows/*:row/*:LineNumber = processFlag">
                            <xsl:element name="processFlag">
                                <xsl:value-of select="X"/>
                            </xsl:element>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:element name="processFlag">
                                <xsl:value-of select="''"/>
                            </xsl:element>                
                        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:copy-of select="child::*[not(self::processFlag)]"/>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>    
    </xsl:template>

</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-12 23:05:05

不要把自己踢得太厉害,但是在你拥有<xsl:value-of select="X"/>的地方,你需要<xsl:text>X</xsl:text>。输入数据中没有名为X的元素。

而当你在做的时候,你需要的只是<xsl:element name="processFlag"/>

如果您只有一个字符串参数,则不需要使用<xsl:value-of/>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18775316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档