我有一个Mule流试图将2个xmls合并为一个xml,作为有效负载传递给rest api调用。 xml1 -
<?xml version="1.0" encoding="utf-8"?>
<ProviderInformation>
<Provider_Name>
<FirstName/>
<LastName/>
<Title/>
</Provider_Name>
<DBA>
<Using_DBA/>
<DBA_Name/>
<Years_DBA/>
<Months_DBA/>
<Using_Former_DBA/>
<Former_DBA_Name/>
<Years_Former_DBA/>
</DBA>
<TIN>
<SSN/>
<Using_EIN/>
<EIN/>
<NPI/>
<Ownership_Type/>
<Gender/>
<DOB/>
<Provider_Email_Address/>
<Provider_Email_Address_Verify/>
<Practice_Website_Address/>
</TIN>
</ProviderInformation>
xml2 -
<?xml version="1.0" encoding="utf-8"?>
<Medicare>
<Enrolled_In_Medicaid/>
<Medicare_ID/>
<Medicare_NPI/>
<Medicare_Enrollment_Date></Medicare_Enrollment_Date>
<Using_Other_Medicaid_CHIP/>
<Other_Medicaid_ID state="SC">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
<Other_Medicaid_ID state="GA">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
</Medicare>
输出 -
<?xml version="1.0" encoding="utf-8"?>
<ROOT-Application>
<ProviderInformation>
<Provider_Name>
<FirstName/>
<LastName/>
<Title/>
</Provider_Name>
<DBA>
<Using_DBA/>
<DBA_Name/>
<Years_DBA/>
<Months_DBA/>
<Using_Former_DBA/>
<Former_DBA_Name/>
<Years_Former_DBA/>
</DBA>
<TIN>
<SSN/>
<Using_EIN/>
<EIN/>
<NPI/>
<Ownership_Type/>
<Gender/>
<DOB/>
<Provider_Email_Address/>
<Provider_Email_Address_Verify/>
<Practice_Website_Address/>
</TIN>
</ProviderInformation>
<Medicare>
<Enrolled_In_Medicaid/>
<Medicare_ID/>
<Medicare_NPI/>
<Medicare_Enrollment_Date></Medicare_Enrollment_Date>
<Using_Other_Medicaid_CHIP/>
<Other_Medicaid_ID state="SC">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
<Other_Medicaid_ID state="GA">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
</Medicare>
</ROOT-Application>
答案 0 :(得分:0)
您可以尝试以下步骤: -
1.使用XPATH3解析 XML1 ,并将所有节点值存储在如下变量中: -
<set-variable variableName="FirstName" value="#[xpath3('//ProviderInformation/Provider_Name/FirstName')]" doc:name="Variable"/>
<set-variable variableName="LastName" value="#[xpath3('//ProviderInformation/Provider_Name/LastName')]" doc:name="Variable"/>
....等等
<set-variable variableName="Medicare_ID" value="#[xpath3('//Medicare/Enrolled_In_Medicaid/Medicare_ID')]" doc:name="Variable"/>
<set-variable variableName="Medicare_NPI" value="#[xpath3('//Medicare/Enrolled_In_Medicaid/Medicare_NPI')]" doc:name="Variable"/>
等等,直到您将所有值提取并存储在变量中。
<mulexml:xslt-transformer name="mergeXml" xsl-file="Transform.xsl" outputEncoding="UTF-8" encoding="UTF-8" maxIdleTransformers="2" maxActiveTransformers="5" returnClass="java.lang.String" doc:name="XSLT">
<mulexml:context-property key="FirstName" value="#[flowVars.FirstName]"/> <!-- Passing the variables in XSLT to produce the XML dynamically -->
<mulexml:context-property key="LastName" value="#[flowVars.LastName]"/> <!-- Passing the variables in XSLT to produce the XML dynamically -->
<mulexml:context-property key="Medicare_ID" value="#[flowVars.Medicare_ID]"/> <!-- Passing the variables in XSLT to produce the XML dynamically -->
<mulexml:context-property key="Medicare_NPI" value="#[flowVars.Medicare_NPI]"/> <!-- Passing the variables in XSLT to produce the XML dynamically -->
</mulexml:xslt-transformer>
请注意,您需要传递用于存储提取的值的所有变量。这里我只向您展示了4个作为示例....
现在,在您的Transform.xsl中: -
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<!-- Getting values from Mule variables -->
<xsl:param name="FirstName"/>
<xsl:param name="LastName"/>
<xsl:param name="Medicare_ID"/>
<xsl:param name="Medicare_NPI"/>
<!-- Add all the variables -->
<xsl:template match="/">
<ROOT-Application>
<ProviderInformation>
<Provider_Name>
<FirstName><xsl:value-of select="$FirstName"/></FirstName>
<LastName><xsl:value-of select="$LastName"/></LastName>
<Title/>
</Provider_Name>
<DBA>
<Using_DBA/>
<DBA_Name/>
<Years_DBA/>
<Months_DBA/>
<Using_Former_DBA/>
<Former_DBA_Name/>
<Years_Former_DBA/>
</DBA>
<TIN>
<SSN/>
<Using_EIN/>
<EIN/>
<NPI/>
<Ownership_Type/>
<Gender/>
<DOB/>
<Provider_Email_Address/>
<Provider_Email_Address_Verify/>
<Practice_Website_Address/>
</TIN>
</ProviderInformation>
<Medicare>
<Enrolled_In_Medicaid/>
<Medicare_ID><xsl:value-of select="$Medicare_ID"/></Medicare_ID>
<Medicare_NPI><xsl:value-of select="$Medicare_NPI"/></Medicare_NPI>
<Medicare_Enrollment_Date></Medicare_Enrollment_Date>
<Using_Other_Medicaid_CHIP/>
<Other_Medicaid_ID state="SC">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
<Other_Medicaid_ID state="GA">
<Other_Medicaid_ID/>
<Other_Medicaid_NPI/>
<Other_medicaid_Effective_Date></Other_medicaid_Effective_Date>
<Other_Medicaid_Enrollment_Date></Other_Medicaid_Enrollment_Date>
<Other_Medicaid_State/>
</Other_Medicaid_ID>
</Medicare>
</ROOT-Application>
</xsl:template>
</xsl:stylesheet>
请注意,您需要填充变量中的所有节点值。我这里仅展示了4个变量(FirstName,LastName,Medicare_ID,Medicare_NPI)作为示例。 这会将您的 XML 与值
合并答案 1 :(得分:0)
尝试使用xsl:copy-of。 像这样 -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<!-- Getting values from Mule variables -->
<xsl:param name="xml1" />
<xsl:param name="xml2" />
<xsl:template match="/">
<ROOT-Application>
<xsl:copy>
<xsl:copy-of select="document($xml1)" />
<xsl:copy-of select="document($xml2)" />
</xsl:copy>
</ROOT-Application>
</xsl:template>
</xsl:stylesheet>
&#13;