我有以下XML:過濾在XSLT給錯誤
<?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>[email protected]</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"
是錯誤的,我不希望名稱在輸出中。我試着在氧氣編輯如下:
<?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>
,但沒有奏效。數據根本不是文件串。
請添加一個xslt-1.0標籤來指示您正在使用的xslt版本。另外,您的源XML沒有名稱空間前綴'ns',但您可以在XPath表達式中指定它。例如在第一個for-each循環中:'',源XML中沒有名爲'ns'的名稱空間,並且沒有名爲'bp_list'的元素。因此'for-each'循環不會執行。此外,''的'select'屬性應該是一個節點集,而'select =「ns:bp_contact/ns:is_admin_user ='true'」'是一個布爾表達式。 –
Madeyedexter