XSLT-преобразование, добавляющее пространство имен от дочернего к родительскому - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь преобразовать xslt для нескольких файлов ответов.

У меня есть один вход xml:

`

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ser-root:getAllAreasResponse xmlns:ser-root="http://ws.dm.gov.ae/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<return>
<ns1:Area xmlns:ns1="http://schemas.datacontract.org/2004/07/EP4.Integration.Entities.Common">
<ns1:Identity>451</ns1:Identity>
<ns1:NameAr>الحبيه الخامسة</ns1:NameAr>
<ns1:NameEn>Al Hebiah Fifth</ns1:NameEn>
</ns1:Area>
<ns1:Area xmlns:ns1="http://schemas.datacontract.org/2004/07/EP4.Integration.Entities.Common">
<ns1:Identity>451</ns1:Identity>
<ns1:NameAr>الحبيه الخامسة</ns1:NameAr>
<ns1:NameEn>Al Hebiah Fifth</ns1:NameEn>
</ns1:Area>
</return>
</ser-root>
</soapenv:Body>
</soapenv:Envelope>

`

Я хочу вывод, как показано ниже.

`

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getAllAreasResponse xmlns:ns2="http://ws.dm.gov.ae/" xmlns:ns3="http://schemas.datacontract.org/2004/07/EP4.Integration.Entities.Common">
<return>
<ns3:Area >
<ns3:Identity>451</ns3:Identity>
<ns3:NameAr>الحبيه الخامسة</ns3:NameAr>
<ns3:NameEn>Al Hebiah Fifth</ns3:NameEn>
</ns3:Area>
<ns3:Area >
<ns3:Identity>452</ns3:Identity>
<ns3:NameAr>الحبيه الثانية</ns3:NameAr>
<ns3:NameEn>Al Hebiah Second</ns3:NameEn>
</ns3:Area>

`

Как написать xslt для этого?

1 Ответ

1 голос
/ 29 апреля 2020

Чтобы изменить префиксы пространства имен без изменения URI пространства имен, вы можете использовать такой код в XSLT 2.0:

<xsl:template match="soapenv:*"  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <xsl:element name="S:{local-name()}" namespace="namespace-uri()">
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

Определить одно такое правило шаблона для каждого пространства имен.

В версии 1.0 на месте soapenv:* использовать *[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...