преобразование xml в xml с использованием xsl - PullRequest
1 голос
/ 01 февраля 2011

Привет, у меня есть один xml, мне нужно преобразовать этот xml в другой xml, используя xsl

мой XML выглядит как

<Information>
    <ShipmentType>
        <shipmentType>A</shipmentType>
    </ShipmentType>
    <ShipmentRouting>
        <airportCityCodeOrigin>AAA</airportCityCodeOrigin>
        <airportCityCodeDestination>BBB</airportCityCodeDestination>
    </ShipmentRouting>
    <EarliestDepartureDateTime>
        <dayOfMonth>00</dayOfMonth>
        <month>OCT</month>
    </EarliestDepartureDateTime>
</Information>

Он должен быть преобразован в этот формат:

<ECIDRA-INP>
   <DRA-INP>
      <OPTION>
         <ORIGIN>
            <STATION>AAA</STATION>
         </ORIGIN>
         <DEST>
            <STATION>BBB</STATION>
         </DEST>
      </OPTION>
   </DRA-INP>
</ECIDRA-INP>

Мне нужны только значения <airportCityCodeOrigin> и <airportCityCodeDestination>, но я получаю все значения тегов.

Ниже приведен XSL, который я написал:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/Information">
        <ECIDRA-INP>
            <DRA-INP>
                <OPTION>
                    <ORIGIN>
                        <STATION>
                            <xsl:value-of select="./ShipmentRouting/airportCodeofDeparture"></xsl:value-of>
                        </STATION>
                    </ORIGIN>
                    <DEST>
                        <STATION>
                            <xsl:value-of select="./ShipmentRouting/airportCodeofArrival"></xsl:value-of>
                        </STATION>
                    </DEST>
                </OPTION>
            </DRA-INP>
        </ECIDRA-INP>
    </xsl:template>
</xsl:stylesheet>

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011

Проблема с вашим кодом состоит в том, что он использует несуществующие имена элементов, такие как airportCodeofDeparture и airportCodeofArrival.

Просто исправьте:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/Information">
      <ECIDRA-INP>
        <DRA-INP>
          <OPTION>
            <ORIGIN>
              <STATION>
            <xsl:value-of select=
                   "ShipmentRouting/airportCityCodeOrigin"/>
          </STATION>
            </ORIGIN>
            <DEST>
              <STATION>
                <xsl:value-of select=
                    "ShipmentRouting/airportCityCodeDestination"/>
              </STATION>
            </DEST>
         </OPTION>
        </DRA-INP>
      </ECIDRA-INP>
    </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к предоставленному документу XML :

<Information>
    <ShipmentType>
        <shipmentType>A</shipmentType>
    </ShipmentType>
    <ShipmentRouting>
        <airportCityCodeOrigin>AAA</airportCityCodeOrigin>
        <airportCityCodeDestination>BBB</airportCityCodeDestination>
    </ShipmentRouting>
    <EarliestDepartureDateTime>
        <dayOfMonth>00</dayOfMonth>
        <month>OCT</month>
    </EarliestDepartureDateTime>
</Information>

желаемый, правильный результат получается :

<ECIDRA-INP>
   <DRA-INP>
      <OPTION>
         <ORIGIN>
            <STATION>AAA</STATION>
         </ORIGIN>
         <DEST>
            <STATION>BBB</STATION>
         </DEST>
      </OPTION>
   </DRA-INP>
</ECIDRA-INP>
0 голосов
/ 01 февраля 2011

Являются ли AAA BBB 00 OCT данными или именами тегов? Это важно, так как способ сокращения данных отличается от тегов «сокращения».

Чтобы создать новый XML, который содержит только 2 имени тега из 5, вы просто пишете выходной XML, как хотите, а затем вводите биты преобразования для извлечения данных. Если вы нацелены на конкретные данные и хотите сделать это с помощью XML (как XSLT), то вам нужно написать XPath, чтобы выбрать правильные узлы. Другой вариант - использовать язык, на котором у вас есть все возможности Regex.

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