使用嵌套的For Each和If从另一个子节点返回节点值

阿德罗利

当“信用卡”是付款方式之一时,我正在尝试提取邮政编码。通常有多种付款方式,即信用卡和现金;信用卡和礼品卡;等等。信用卡不一定是第一笔付款,但是决不会允许使用一张以上的信用卡。我想遍历所有付款类型,并且当付款类型值为'CreditCard'时,然后检索邮政编码。如果未使用信用卡,则该值应为null。

根据我的初步研究,看起来我需要嵌套的For-Each,但不一定是IF。我找到了很多解释嵌套的for-for语句的文章和一些显示简单if语句的文章。我还没有找到任何清晰的文章来显示使用这些组合语句从不同节点级别进行检索。这是我这一行的伪代码:

如果...购买/购买/付款/付款/付款/类型='信用卡'则
...购买/购买/付款/付款/付款/地址/邮政编码的值

我尝试过的各种版本在SSIS包中都没有失败,但是没有检索到结果。

XML示例:

<?xml version="1.0" encoding="utf-8"?>
<exportbatch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<purchases>
    <purchase>
        <posRef>987654321</posRef>
        <locationRef>1234</locationRef>
        <totalamount>99.9900</totalamount>
        <payments>
            <payment>
                <amount>50.0000</amount>
                <description>Gift Card x-8765</description>
                <type>GiftCard</type>
            </payment>
            <payment>
                <amount>19.5200</amount>
                <description>some credit card brand x-8765</description>
                <brand>some credit card brand</brand>
                <type>CreditCard</type>
                <address>
                    <zipcode>65432</zipcode>
                </address>
            </payment>
        </payments>
    </purchase>
</purchases>
</exportbatch>  

XSLT示例:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="exportbatch">
    <purchases>
    <xsl:for-each select="purchases/purchase">
        <purchase>
            <posRef><xsl:value-of select="posRef"/></posRef>
            <LocationId><xsl:value-of select="locationRef"/></LocationId>
            <TotalAmount><xsl:value-of select="totalamount"/></TotalAmount>
            <xsl:for-each select="payments/payment/type">
                <xsl:if test="'CreditCard'">
                    <PaymentZipCode><xsl:value-of select="address/zipcode"/></PaymentZipCode>
                </xsl:if>
            </xsl:for-each>
        </purchase>
    </xsl:for-each>
    </purchases>
</xsl:template>
</xsl:stylesheet>

备用XSLT示例:

    <xsl:for-each select="payments/payment">
        <xsl:if test="@type='CreditCard'">
            <PaymentZipCode><xsl:value-of select="address/zipcode"/></PaymentZipCode>
        </xsl:if>
    </xsl:for-each>
michael.hor257k

我认为您可以:

<xsl:template match="exportbatch">
    <purchases>
        <xsl:for-each select="purchases/purchase">
            <purchase>
                <posRef><xsl:value-of select="posRef"/></posRef>
                <LocationId><xsl:value-of select="locationRef"/></LocationId>
                <TotalAmount><xsl:value-of select="totalamount"/></TotalAmount>
                <xsl:variable name="cc" select="payments/payment[type='CreditCard']" />
                <xsl:if test="$cc">
                    <PaymentZipCode><xsl:value-of select="$cc/address/zipcode"/></PaymentZipCode>
                </xsl:if>
            </purchase>
        </xsl:for-each>
    </purchases>
</xsl:template>

这将测试payment其类型是否CreditCard存在-如果存在,则从那里检索邮政编码。

或者,您可以执行以下操作:

<xsl:template match="exportbatch">
    <purchases>
        <xsl:for-each select="purchases/purchase">
            <purchase>
                <posRef><xsl:value-of select="posRef"/></posRef>
                <LocationId><xsl:value-of select="locationRef"/></LocationId>
                <TotalAmount><xsl:value-of select="totalamount"/></TotalAmount>
                <xsl:if test="payments/payment[type='CreditCard']">
                    <PaymentZipCode><xsl:value-of select="payments/payment/address/zipcode"/></PaymentZipCode>
                </xsl:if>
            </purchase>
        </xsl:for-each>
    </purchases>
</xsl:template>

这将进行相同的测试,如果通过,它将检索可以找到的第一个邮政编码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用lxml解析XML,当存在另一个子节点时无法获取文本

来自分类Dev

使用XPath获取节点的每个子节点的第一个子节点

来自分类Dev

如何使用XSLT根据另一个节点的内容获取XML节点的值?

来自分类Dev

根据另一个节点的属性使用属性值选择节点

来自分类Dev

使用xmlstarlet仅添加一个子节点

来自分类Dev

使用JPath,如何基于同一节点的另一个键值对返回值?

来自分类Dev

XPath 1.0:使用当前节点的父节点的属性值来查找另一个匹配的节点

来自分类Dev

使用子节点数据检索另一个用户UID

来自分类Dev

如何使用beautifulsoup将具有多个子节点的父节点和子节点信息提取到一个数据帧中?

来自分类Dev

使用 firebase 云函数将数据从一个 node1 子节点复制到另一个 node2 子节点

来自分类Dev

如何使用XSLT删除根节点并使第一个子节点成为新的根节点?

来自分类Dev

使用一个模板作为属性(按值),使用另一个模板作为(父)节点

来自分类Dev

使用一个模板作为属性(按值),使用另一个模板作为(父)节点

来自分类Dev

尝试让一个子视图使用ui-router调用另一个子视图

来自分类Dev

使用Java读取XML中另一个节点内的节点

来自分类常见问题

如何使用querySelector检索div的第一个子元素同级节点?

来自分类Dev

仅在一个子节点中使用xmlstarlet编辑XML

来自分类Dev

使用 boost::property_tree 选择一个子节点标签而不考虑位置

来自分类Dev

使用Python从xml中的一个节点遍历到另一个

来自分类Dev

SQL从表中选择XML列作为xml节点(而不是嵌套在另一个xml节点下)?

来自分类Dev

如何使用Nokogiri将一个节点的HTML内容添加到另一个节点

来自分类Dev

使用python multiprocessing子进程如何终止另一个子进程?

来自分类Dev

如何返回用 XSLT 中另一个子节点的数据修改的子节点?

来自分类Dev

在XSLT中,如何根据另一个子节点的值显示一个子节点的值

来自分类Dev

MongoDB-使用另一个子数组字段更新父数组字段

来自分类Dev

使用powershell将另一个子元素附加到xml

来自分类Dev

使用节点js从另一个调用两个文件

来自分类Dev

使用XSLT模板将一个Xml文档转换为另一个Xml文档时的空节点值

来自分类Dev

无法在一个 Virtualbox 来宾 VM 和另一个 VM 上的 kubernetes 节点上使用 kubernetes master 启动 nginx pod

Related 相关文章

  1. 1

    使用lxml解析XML,当存在另一个子节点时无法获取文本

  2. 2

    使用XPath获取节点的每个子节点的第一个子节点

  3. 3

    如何使用XSLT根据另一个节点的内容获取XML节点的值?

  4. 4

    根据另一个节点的属性使用属性值选择节点

  5. 5

    使用xmlstarlet仅添加一个子节点

  6. 6

    使用JPath,如何基于同一节点的另一个键值对返回值?

  7. 7

    XPath 1.0:使用当前节点的父节点的属性值来查找另一个匹配的节点

  8. 8

    使用子节点数据检索另一个用户UID

  9. 9

    如何使用beautifulsoup将具有多个子节点的父节点和子节点信息提取到一个数据帧中?

  10. 10

    使用 firebase 云函数将数据从一个 node1 子节点复制到另一个 node2 子节点

  11. 11

    如何使用XSLT删除根节点并使第一个子节点成为新的根节点?

  12. 12

    使用一个模板作为属性(按值),使用另一个模板作为(父)节点

  13. 13

    使用一个模板作为属性(按值),使用另一个模板作为(父)节点

  14. 14

    尝试让一个子视图使用ui-router调用另一个子视图

  15. 15

    使用Java读取XML中另一个节点内的节点

  16. 16

    如何使用querySelector检索div的第一个子元素同级节点?

  17. 17

    仅在一个子节点中使用xmlstarlet编辑XML

  18. 18

    使用 boost::property_tree 选择一个子节点标签而不考虑位置

  19. 19

    使用Python从xml中的一个节点遍历到另一个

  20. 20

    SQL从表中选择XML列作为xml节点(而不是嵌套在另一个xml节点下)?

  21. 21

    如何使用Nokogiri将一个节点的HTML内容添加到另一个节点

  22. 22

    使用python multiprocessing子进程如何终止另一个子进程?

  23. 23

    如何返回用 XSLT 中另一个子节点的数据修改的子节点?

  24. 24

    在XSLT中,如何根据另一个子节点的值显示一个子节点的值

  25. 25

    MongoDB-使用另一个子数组字段更新父数组字段

  26. 26

    使用powershell将另一个子元素附加到xml

  27. 27

    使用节点js从另一个调用两个文件

  28. 28

    使用XSLT模板将一个Xml文档转换为另一个Xml文档时的空节点值

  29. 29

    无法在一个 Virtualbox 来宾 VM 和另一个 VM 上的 kubernetes 节点上使用 kubernetes master 启动 nginx pod

热门标签

归档