首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从XSLT中提取不同层次的值,并用";“分隔。

从XSLT中提取不同层次的值,并用";“分隔。
EN

Stack Overflow用户
提问于 2017-01-16 21:14:48
回答 2查看 146关注 0票数 1

我有以下XML

代码语言:javascript
运行
复制
<bp>
<bp_id>319</bp_id>
<bp_name>HPP</bp_name>
    <contact>
        <id>239764182</id>
        <first_name>abc</first_name>
        <last_name>def</last_name>
        <email>
            <id>1234</id>
            <email_address>xvxn@hddd.com</email_address>
            <is_primary>true</is_primary>
        </email>
        <phone>
            <id>222</id>
            <phone_number>773890814350</phone_number>
            <country_code>1</country_code>
            <display_name>17733338908150</display_name>
            <is_primary>true</is_primary>
            <type_id>1201</type_id>
            <type_code>Office</type_code>
        </phone>
        <bp_contact>
            <is_admin_user>false</is_admin_user>
            <is_company_officer>false</is_company_officer>
            <shared_contact_type_id>3100</shared_contact_type_id>
            <shared_contact_type_description>Direct Contact</shared_contact_type_description>
            <role>
                <role_id>8</role_id>
                <role_name>something</role_name>
                <responsibility>
                    <responsibility_id>3</responsibility_id>
                    <responsibility_name>this &amp; thats</responsibility_name>
                    <is_primary_contact>false</is_primary_contact>
                </responsibility>
                <assignment>
                    <id>1507420</id>
                    <assignment_type_id>2002</assignment_type_id>
                    <abc_ven_number>4225506</abc_ven_number>
                    <department_id>97</department_id>
                    <is_primary_contact>false</is_primary_contact>
                </assignment>
                <assignment>
                    <id>552593</id>
                    <assignment_type_id>2002</assignment_type_id>
                    <abc_ven_number>1048993</abc_ven_number>
                    <department_id>97</department_id>
                    <is_primary_contact>false</is_primary_contact>
                </assignment>
                <assignment>
                    <id>1507391</id>
                    <assignment_type_id>2002</assignment_type_id>
                    <abc_ven_number>4225506</abc_ven_number>
                    <department_id>2</department_id>
                    <is_primary_contact>false</is_primary_contact>
                </assignment>
                <assignment>
                    <id>552551</id>
                    <assignment_type_id>2002</assignment_type_id>
                    <abc_ven_number>1048993</abc_ven_number>
                    <department_id>2</department_id>
                    <is_primary_contact>false</is_primary_contact>
                </assignment>
            </role>
            <address>
                <is_address_owner>true</is_address_owner>
                <id>101227</id>
                <line1>4501 W 47th</line1>
                <city>Chicago</city>
                <postal_code>60632</postal_code>
                <country_code>US</country_code>
                <country_name>UNITED STATES</country_name>
                <subdivision_code>US-IL     </subdivision_code>
                <subdivision_name>Illinois</subdivision_name>
                <validation_status>0</validation_status>
            </address>
        </bp_contact>
    </contact>
    <merch_planning_partnership_tier_id>9801</merch_planning_partnership_tier_id>
    <merch_planning_partnership_tier_name>Basic Partner</merch_planning_partnership_tier_name>
</bp>

对于赋值下的abc_ven_number的多个值,我想要所有级别的abc_ven_number的所有值,并且它们应该用分号分隔。

代码语言:javascript
运行
复制
4225506;1048993;4225506;1048993 -- like this.

下面是我的XSLT

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0"         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fo="http://www.w3.org/1999/XSL/Format"     xmlns:ns="http://target.com/2012/03/01/canonical/BusinessPartner"> 
<xsl:strip-space elements="*" />
 <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">bp_name,bp_id 
<xsl:for-each select="ns:bp_list/ns:bp">
<xsl:variable name="bp_name" select="normalize-space(ns:bp_name)" />
<xsl:value-of select="normalize-space(ns:contact/ns:bp_contact/ns:role/ns:assignment/ns:gms_vendor_number)"/>
<xsl:text>&#xA;</xsl:text>  
</xsl:for-each></xsl:template>
</xsl:stylesheet>

这样,我只得到了第一个值。我试着用".“但我只需要abc_ven_number,而不是该级别的其他值。

今天是我从事XSLT工作的第一天。

EN

回答 2

Stack Overflow用户

发布于 2017-01-16 21:37:05

这将选择任意位置的所有abc_ven_number元素,并使用;作为分隔符连接它们的文本:

代码语言:javascript
运行
复制
<xsl:template match="/">
  <xsl:for-each select="//abc_ven_number">
    <xsl:value-of select="."/>
    <xsl:if test="position() != last()">
      <xsl:text>;</xsl:text>
    </xsl:if>
  </xsl:for-each>
</xsl:template>
票数 1
EN

Stack Overflow用户

发布于 2017-01-16 22:01:49

在XSLT 2中,可以使用带有分隔符的xsl:value-of select

代码语言:javascript
运行
复制
<xsl:template match="/">
<xsl:value-of select="descendant::abc_ven_number" separator=";"/>
</xsl:template>

或者,如果您想要分界值:

代码语言:javascript
运行
复制
<xsl:template match="/">
  <xsl:value-of select="distinct-values(descendant::abc_ven_number)" separator=";"/>
 </xsl:template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41677260

复制
相关文章

相似问题

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