Добавление атрибута xmlns в элемент root - PullRequest
0 голосов
/ 19 июня 2020

Целый день пытался просто добавить атрибут xmlns к элементу root моего xml, но, похоже, не понял его.

Source = A. xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<INPUTS>
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority></Priority>
    <LineNbr>VPI000594422</LineNbr>
    <Article>B02369</Article>
    <Description>AANSLUITKLEM</Description>
    <Quantity>14,00</Quantity>
    <Location></Location>
    <LotNbr></LotNbr>
    <Comment></Comment>
    <Zone>test</Zone>
    <InboundCarrier></InboundCarrier>
    <UnitOfMeasurement></UnitOfMeasurement>
  </INP_NO_PARAM>
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority></Priority>
    <LineNbr>VPI000594426</LineNbr>
    <Article>B08432</Article>
    <Description>AARDINGSKLEM</Description>
    <Quantity>321,00</Quantity>
    <Location></Location>
    <LotNbr></LotNbr>
    <Comment></Comment>
    <Zone></Zone>
    <InboundCarrier></InboundCarrier>
    <UnitOfMeasurement></UnitOfMeasurement>
  </INP_NO_PARAM>
</INPUTS>

Желаемый результат = B. xml

<INPUTS xmlns="GE_Schemas">
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority></Priority>
    <LineNbr>VPI000594422</LineNbr>
    <Article>B02369</Article>
    <Description>AANSLUITKLEM</Description>
    <Quantity>14,00</Quantity>
    <Location></Location>
    <LotNbr></LotNbr>
    <Comment></Comment>
    <Zone></Zone>
    <InboundCarrier></InboundCarrier>
    <UnitOfMeasurement></UnitOfMeasurement>
  </INP_NO_PARAM>
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority></Priority>
    <LineNbr>VPI000594426</LineNbr>
    <Article>B08432</Article>
    <Description>AARDINGSKLEM</Description>
    <Quantity>321,00</Quantity>
    <Location></Location>
    <LotNbr></LotNbr>
    <Comment></Comment>
    <Zone></Zone>
    <InboundCarrier></InboundCarrier>
    <UnitOfMeasurement></UnitOfMeasurement>
  </INP_NO_PARAM>
</INPUTS>

Моя лучшая попытка достичь этого результата - это xsd:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">

    <!--No xml declaration line-->
    <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

    <!-- copy everything as-is except for more specific templates below -->
    <xsl:template match="*">
      <xsl:copy>
        <xsl:apply-templates />
      </xsl:copy>
    </xsl:template>

    <!--Change INPUTS tag-->
    <xsl:template match="INPUTS">
        <INPUTS xmlns="GE_Schemas" >
        </INPUTS>
        <xsl:apply-templates />
    </xsl:template>

</xsl:stylesheet>

Это результат .
Не совсем правильно, потому что кажется, что тег <INPUTS> самозакрывается, а я бы хотел, чтобы он отображался в последней строке вывода:

<INPUTS xmlns="GE_Schemas"/>
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority/>
    <LineNbr>VPI000594422</LineNbr>
    <Article>B02369</Article>
    <Description>AANSLUITKLEM</Description>
    <Quantity>14,00</Quantity>
    <Location/>
    <LotNbr/>
    <Comment/>
    <Zone>test</Zone>
    <InboundCarrier/>
    <UnitOfMeasurement/>
  </INP_NO_PARAM>
  <INP_NO_PARAM>
    <OrderNbr>TR-00001541</OrderNbr>
    <Priority/>
    <LineNbr>VPI000594426</LineNbr>
    <Article>B08432</Article>
    <Description>AARDINGSKLEM</Description>
    <Quantity>321,00</Quantity>
    <Location/>
    <LotNbr/>
    <Comment/>
    <Zone/>
    <InboundCarrier/>
    <UnitOfMeasurement/>
  </INP_NO_PARAM>

Мне удалось чтобы удалить эту строку

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

Однако я просто не могу добавить атрибут xmlns="GE_Schemas" к тегу root <INPUTS>.

Также важно, чтобы теги НЕ самозакрывающийся.
Значит, <Zone></Zone> должен оставаться таким, и его нельзя изменить на <Zone/>, как это происходит сейчас.

Есть ли у кого-нибудь идеи, как решить эти 2 проблемы?

1 Ответ

0 голосов
/ 19 июня 2020

Используйте это преобразование

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs">

  <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="*">
    <xsl:element name="{local-name()}" namespace="GE_Schemas">
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Примечание: согласно спецификации xml узлы <Zone></Zone> и <Zone/> эквивалентны.

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