我有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<bp_list xmlns="http://example.com/2012/03/01/canonical/BusinessPartner">
<total_count>221</total_count>
<bp>
<bp_id>82721</bp_id>
<bp_name>bommamv1</bp_name>
<last_changed_date>2017-01-17T02:52:09</last_changed_date>
<web_site>
<id>40485</id>
<web_site_address>www.bommamv1.com</web_site_address>
<type>1501</type>
<is_primary>false</is_primary>
</web_site>
<social_compliance_participation_id>9531</social_compliance_participation_id>
<social_compliance_participation_name>Not currently in Scope</social_compliance_participation_name>
<private_public_id>9501</private_public_id>
<private_public_name>Private</private_public_name>
<year_establishment>2016</year_establishment>
<contact>
<id>259832444716</id>
<first_name>abc</first_name>
<last_name>mv1</last_name>
<email>
<id>230631479</id>
<email_address>abc@gmail.com</email_address>
<is_primary>true</is_primary>
</email>
<phone>
<id>327703187</id>
<phone_number>6014534677</phone_number>
<extension>101</extension>
<country_code>1</country_code>
<display_name>16014534677</display_name>
<is_primary>true</is_primary>
<type_id>1201</type_id>
<type_code>Office</type_code>
</phone>
<bp_contact>
<is_admin_user>true</is_admin_user>
<is_company_officer>true</is_company_officer>
<shared_contact_type_id>3100</shared_contact_type_id>
<shared_contact_type_description>Direct Contact</shared_contact_type_description>
<job_title>
<id>1</id>
<name>Chief Executive Officer</name>
</job_title>
</bp_contact>
</contact>
</bp>
我只想要那些"Is_admin"
为真的联系人,在这种情况下,我想在“管理员”列下“是”。如果"Is_admin"
为false,我根本不想要输出中的名称。我在氧气编辑器中尝试了以下内容:
<?xml version="1.0" encoding="utf-8"?>
<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|last_name|first_name|admin_user|job_title|email_address|phone_number_1|phone_number_2|responsibility_name
<xsl:for-each select="ns:bp_list/ns:bp">
<xsl:variable name="bp_name" select="ns:bp_name" />
<xsl:for-each select="ns:contact">
<xsl:value-of select="$bp_name"/>|<xsl:value-of select="ns:email[ns:is_primary = 'true']/ancestor-or-self::ns:contact/ns:last_name"/>|<xsl:value-of select="ns:email[ns:is_primary = 'true']/ancestor-or-self::ns:contact/ns:first_name"/>|<xsl:for-each select="ns:bp_contact/ns:is_admin_user='true'"><xsl:text>Yes</xsl:text></xsl:for-each>|
<xsl:for-each select="(ns:bp_contact/ns:job_title)">
<xsl:value-of select="(ns:name)"/>
<xsl:if test="position() != last()">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:for-each>|<xsl:value-of select="normalize-space(ns:email/ns:email_address)"/>|<xsl:value-of select="ns:phone[ns:is_primary = 'true']/ns:phone_number" />
<xsl:text>|</xsl:text>
<xsl:value-of select="ns:phone[ns:is_primary = 'false']/ns:phone_number" />
<xsl:text>|</xsl:text>|<xsl:for-each select="(ns:bp_contact/ns:role/ns:responsibility)">
<xsl:value-of select="(ns:responsibility_name)"/>
<xsl:if test="position() != last()">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text> </xsl:text></xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我正在尝试处理上面的要求,如下所示(以防上述代码令人困惑):
<xsl:for-each select="ns:bp_contact/ns:is_admin_user='true'">
<xsl:text>Yes</xsl:text>
</xsl:for-each>|
我收到错误说
该值不是节点集
请告诉我这里有什么问题,我该如何处理这种情况。
我尝试在代码中添加模板:
<xsl:template match="ns:bp/ns:contact/ns:bp_contact[ns:is_admin_user = 'true']"><xsl:copy-of select="."/></xsl:template>
但它不起作用。数据根本不是文件字符串。
答案 0 :(得分:0)
您可以使用以下XPath表达式获取所有is_admin_user
= true
contact
:
/contact[bp_contact/is_admin_user='true']
使用contact
属性复制所有admin
节点的XSLT将如下所示:
<xsl:template match="/contact[bp_contact/is_admin_user='true']">
<xsl:copy-of select="."/>
</xsl:template>
查看您的XML我没有发现任何证据表明您需要在任何查询上应用命名空间。