Извлечь XML-фрагмент для использования в качестве вывода с префиксными модами - PullRequest
0 голосов
/ 05 марта 2019

Я пытался придумать описательное название ... смеется ...

Во всяком случае; это, вероятно, просто, но я немного борюсь здесь. У меня есть вход, который мне нужно обработать. Мне нужно сделать это:

  1. Извлеките «процесс» и все его дочерние элементы.
  2. Изменить все префиксы NS "client" на "fha"
  3. Добавить базовое пространство имен в тег «process» (да, я знаю, что это забавно, но для этого нужен ресурс, который я потребляю).

Входной файл

<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>

Я много чего пробовал, но чувствую, что просто бросаю лапшу в стену. (

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Будет ли это работать для вас?

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>
0 голосов
/ 05 марта 2019

Оказывается, мне не нужно было ничего делать со встроенным фрагментом.Конечная точка смогла понять пространство имен по умолчанию для встроенных документов (но если кто-то захочет ответить на это, я не буду возражать).

Единственное изменение, которое мне нужно было сделать, чтобы ответить Майклу, былодобавить объявление пространства имен в тег "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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...