Я пытался придумать описательное название ... смеется ...
Во всяком случае; это, вероятно, просто, но я немного борюсь здесь. У меня есть вход, который мне нужно обработать. Мне нужно сделать это:
Входной файл
<TOTALRequest-Response-Keys xmlns="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <fha_case_number>2812883060</fha_case_number> <loan_number>1000006611</loan_number> <score_dt>2019/01/31 16:23:55</score_dt> <aus>ZFWF</aus> <times_enqueued>1</times_enqueued> <TOTALRequest-Response xmlns:client="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <client:process> <client:monthly_income/> <!-- many elements --> <client:loanapp> <client:loanapptype>MISMOAUS2.4</client:loanapptype> <ns1:loanappdata xmlns="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:ns2="http://mismo.org/aus/" xmlns:ns1="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <ns2:LOAN_APPLICATION MISMOVersionID="2.4"/> <!-- many elements ns1:whatever --> </ns1:loanappdata> </client:loanapp> </client:process> <client:processResponse/> </TOTALRequest-Response> </TOTALRequest-Response-Keys>
Желаемый выход
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <soapenv:Body> <fha:process xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <fha:monthly_income> <fha:loanapp> <fha:loanapptype>MISMOAUS2.4</fha:loanapptype> <ns1:loanappdata xmlns="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:ns2="http://mismo.org/aus/" xmlns:ns1="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <ns2:LOAN_APPLICATION MISMOVersionID="2.4"> </ns1:loanappdata> </fha:loanapp> </fha:process> </soapenv:Body> </soapenv:Envelope>
Какой у меня ток; у вас есть
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:client="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:ns1="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> xmlns:ns2="http://mismo.org/aus/"> <xsl:output method="xml" version="1.0" omit-xml-declaration="yes" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <soapenv:Body> <fha:process xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <xsl:copy> <xsl:copy-of select="/*/*/*:process/child::*"/> </xsl:copy> </fha:process> </soapenv:Body> </soapenv:Envelope> </xsl:template> <!-- <xsl:template match="client:*" name="change_prefix"> <xsl:element name="fha:{local-name()}"> <xsl:apply-templates select="."/> </xsl:element> </xsl:template> <xsl:template match="/"> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <soapenv:Body> <xsl:copy> <xsl:copy-of select="/*/*/child::*"/> </xsl:copy> <xsl:apply-templates select="change_prefix" /> </soapenv:Body> </soapenv:Envelope> </xsl:template> --> </xsl:stylesheet>
Я много чего пробовал, но чувствую, что просто бросаю лапшу в стену. (
Будет ли это работать для вас?
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:client="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/fha:TOTALRequest-Response-Keys"> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <soapenv:Body> <xsl:apply-templates select="fha:TOTALRequest-Response/client:process"/> </soapenv:Body> </soapenv:Envelope> </xsl:template> <xsl:template match="client:*"> <xsl:element name="fha:{local-name()}"> <xsl:apply-templates/> </xsl:element> </xsl:template> </xsl:stylesheet>
Оказывается, мне не нужно было ничего делать со встроенным фрагментом.Конечная точка смогла понять пространство имен по умолчанию для встроенных документов (но если кто-то захочет ответить на это, я не буду возражать).
Единственное изменение, которое мне нужно было сделать, чтобы ответить Майклу, былодобавить объявление пространства имен в тег "envelope".(Мишель никак не мог знать, что конечному процессу нужно другое пространство имен.)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:client="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:ns2="http://mismo.org/aus/" xmlns:ns1="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/fha:TOTALRequest-Response-Keys"> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f17="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard" xmlns:fha="http://xmlns.oracle.com/F17CTOTALScorecard/F17CTOTALScorecard/F17CTOTALScorecard"> <soapenv:Body> <xsl:apply-templates select="fha:TOTALRequest-Response/client:process"/> </soapenv:Body> </soapenv:Envelope> </xsl:template> <xsl:template match="client:*"> <xsl:element name="fha:{local-name()}"> <xsl:apply-templates/> </xsl:element> </xsl:template> </xsl:stylesheet>