我想将我的旧服务响应转换为CDM服务响应。为此,我在WSO2 ESB中使用XSLT Mediator。我对我的XSLT的语法感到困惑。我正在做正确的方式吗? XSLT介体工作正常。我已经确认了。 我首先在一个在线工具http://xslt.online-toolz.com/tools/xslt-transformation.php上尝试它。
传统响应(输入):
<GetPersonResponse xmlns="http://com.example.com/xsd/Person_01_RequestResponse_001">
<Person xsi:type="ns1:Person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:PersonId xmlns:ns2="http://com.example.com/xsd/Person_01">4224</ns2:PersonId>
<ns3:FirstName xmlns:ns3="http://com.example.com/xsd/Person_01">John</ns3:FirstName>
<ns4:LastName xmlns:ns4="http://com.example.com/xsd/Person_01">Doe</ns4:LastName>
<ns5:FatherName xmlns:ns5="http://com.example.com/xsd/Person_01">Khalid</ns5:FatherName>
<ns6:Religion xmlns:ns6="http://com.example.com/xsd/Person_01">Islam</ns6:Religion>
<ns7:MotherTongue xmlns:ns7="http://com.example.com/xsd/Person_01">Urrdu</ns7:MotherTongue>
<ns8:DateOfBirth xmlns:ns8="http://com.example.com/xsd/Person_01">1893-02-02</ns8:DateOfBirth>
<ns9:Gender xmlns:ns9="http://com.example.com/xsd/Person_01" xsi:type="ns1:GenderType">Male</ns9:Gender>
<ns10:CurrentAddress xmlns:ns10="http://com.example.com/xsd/Person_01" xsi:type="ns1:AddressDetail">
<ns10:AddressDetailId>194</ns10:AddressDetailId>
<ns10:StreetNo>5</ns10:StreetNo>
<ns10:HouseNo>123</ns10:HouseNo>
<ns10:Town>Johar</ns10:Town>
<ns10:District>Lahore</ns10:District>
<ns10:City>Lahore</ns10:City>
<ns10:State>Punjab</ns10:State>
<ns10:Country>Pakistan</ns10:Country>
<ns10:Postal>54000</ns10:Postal>
</ns10:CurrentAddress>
<ns11:HomeAddress xmlns:ns11="http://com.example.com/xsd/Person_01" xsi:type="ns1:AddressDetail">
<ns11:AddressDetailId>195</ns11:AddressDetailId>
<ns11:StreetNo>5</ns11:StreetNo>
<ns11:HouseNo>123</ns11:HouseNo>
<ns11:Town>Johar</ns11:Town>
<ns11:District>Lahore</ns11:District>
<ns11:City>Lahore</ns11:City>
<ns11:State>Punjab</ns11:State>
<ns11:Country>Pakistan</ns11:Country>
<ns11:Postal>54000</ns11:Postal>
</ns11:HomeAddress>
<ns12:Height xmlns:ns12="http://com.example.com/xsd/Person_01">6</ns12:Height>
<ns13:Weight xmlns:ns13="http://com.example.com/xsd/Person_01">100</ns13:Weight>
<ns14:CNIC xmlns:ns14="http://com.example.com/xsd/Person_01">35302</ns14:CNIC>
<ns15:ContactInfo xmlns:ns15="http://com.example.com/xsd/Person_01" xsi:type="ns1:ContactDetail">
<ns15:HomePhone>454545</ns15:HomePhone>
<ns15:CellPhone>3343434</ns15:CellPhone>
<ns15:WorkPlacePhone>34343434</ns15:WorkPlacePhone>
<ns15:Email>omer@gmail.com</ns15:Email>
</ns15:ContactInfo>
<ns16:MaritalStatus xmlns:ns16="http://com.example.com/xsd/Person_01">Single</ns16:MaritalStatus>
<ns17:Nationality xmlns:ns17="http://com.example.com/xsd/Person_01">Pakistani</ns17:Nationality>
</Person>
<ResponseCode>PERSON MODULE SUCCESS - 00</ResponseCode>
<ResponseMessage>Data Fetched Successfully</ResponseMessage>
</GetPersonResponse>
应该输出什么:
我想改变&#34; Religon&#34;的价值。元素并用&#34; FatherName&#34;替换它的值。元素价值。其余的响应应该保持不变。
我的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:m0="http://com.example.com/xsd/Person_01">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="//m0:GetPersonResponse">
<xsl:apply-templates select="//m0:Religion"/>
</xsl:template>
<xsl:template match="//m0:Religion">
<xsl:value-of select="//m0:FatherName"/>
</xsl:template>
</xsl:stylesheet>
我通过删除名称空间来尝试它,但它也没有工作。
答案 0 :(得分:2)
GetPersonResponse 的命名空间为http://com.example.com/xsd/Person_01_RequestResponse_001
必须指定THIS名称空间,不要删除它或使用引用“http://com.example.com/xsd/Person_01”
但是,m0是 Religion 节点
的正确名称空间