Нужно добавить xsi в пространство имен - PullRequest
0 голосов
/ 01 мая 2018

У меня есть это в качестве ввода

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03">
  <CstmrPmtStsRpt>
    <GrpHdr>
      <MsgId></MsgId>
      <CreDtTm></CreDtTm>
      <InitgPty>
        <Id>
          <OrgId>
            <BICOrBEI></BICOrBEI>
          </OrgId>
        </Id>
      </InitgPty>
    </GrpHdr>
    <OrgnlGrpInfAndSts>
      <OrgnlMsgId></OrgnlMsgId>
      <OrgnlMsgNmId></OrgnlMsgNmId>
      <OrgnlNbOfTxs></OrgnlNbOfTxs>
      <OrgnlCtrlSum></OrgnlCtrlSum>
      <GrpSts></GrpSts>
    </OrgnlGrpInfAndSts>
  </CstmrPmtStsRpt>
</Document>

Мне нужно ниже, так как мой вывод с подробностями о xsi

<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03">
<CstmrPmtStsRpt>
        <GrpHdr>
          <MsgId></MsgId>
          <CreDtTm></CreDtTm>
          <InitgPty>
            <Id>
              <OrgId>
                <BICOrBEI></BICOrBEI>
              </OrgId>
            </Id>
          </InitgPty>
        </GrpHdr>
        <OrgnlGrpInfAndSts>
          <OrgnlMsgId></OrgnlMsgId>
          <OrgnlMsgNmId></OrgnlMsgNmId>
          <OrgnlNbOfTxs></OrgnlNbOfTxs>
          <OrgnlCtrlSum></OrgnlCtrlSum>
          <GrpSts></GrpSts>
        </OrgnlGrpInfAndSts>
      </CstmrPmtStsRpt>
    </Document>

В настоящее время я использую xslt, который я пытаюсь использовать для установки namespace и xsi, но так как я не могу использовать это на моем порте приема из-за факт, что мне нужно использовать проход через конвейер

*<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:template match="@*|text()|comment()|processing-instruction()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/Document">
        <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
             <xsl:apply-templates select="@*|node()"/>           
        </Document>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}" namespace="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

*

Нужна помощь на том же

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Использовал дизассемблер в пользовательском конвейере, и он работал.

0 голосов
/ 01 мая 2018

Ваш сопоставитель <xsl:template match="/Document"> никогда не вызывается, потому что ему не хватает пространства имен.

Добавьте пространство имен в свой XSL с любым псевдонимом и добавьте псевдоним к вашему сопоставителю.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:iso="urn:iso:std:iso:20022:tech:xsd:pain.002.001.03">
...
<xsl:template match="/iso:Document">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...