Как заставить преобразование xslt использовать qnames в выходных элементах вместо полных пространств имен? - PullRequest
0 голосов
/ 05 июня 2018

Я преобразовываю входной XML в другой выходной XML, и мне хотелось бы, чтобы в выходном XML имена q были сохранены, но пространства имен опущены.Я пытался использовать exclude-result-prefixes и пару других вещей, но мне не удалось это сделать (я только начинаю с XLST)

Входной XML, я буду работатьможет не иметь объявленных пространств имен, например ниже

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<A>
    <B>
        <MessageIdentifier>826964</MessageIdentifier>
        <MessageDateTime>2018-05-22T11:54:45</MessageDateTime>
        <MessageType>Z</MessageType>
    </B>
</A>

Мой сценарий преобразования выполнит пару преобразований, например:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
        exclude-result-prefixes="xs xd cbc " version="2.0">
        <!--Indents the results to get the proper xml formatting-->
        <xsl:output media-type="text/xml" version="1.0" encoding="UTF-8" indent="yes"
            use-character-maps="xml"/>
        <xsl:strip-space elements="*"/>

        <xsl:character-map name="xml">
            <xsl:output-character character="&amp;" string="&amp;"/>
        </xsl:character-map>
        <xsl:template match="A">

            <Dummy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
            <cbc:UBLVersionID>2.2</cbc:UBLVersionID>

                <cbc:ProfileID>
                    <xsl:value-of select="B/MessageType"/>
                </cbc:ProfileID>


                <cbc:UUID>
                    <xsl:value-of select="B/MessageIdentifier"/>
                </cbc:UUID>

   </Dummy>

    </xsl:template>


</xsl:stylesheet>   

Мой текущий вывод

<?xml version="1.0" encoding="UTF-8"?>
<Dummy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <cbc:UBLVersionID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2.2</cbc:UBLVersionID>
   <cbc:ProfileID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Z</cbc:ProfileID>
   <cbc:UUID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">826964</cbc:UUID>
</Dummy>

Я бы хотел, чтобы пространства имен не расширялись в каждом элементе, например:

<?xml version="1.0" encoding="UTF-8"?>
<Dummy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
    <cbc:UBLVersionID >2.2</cbc:UBLVersionID>
    <cbc:ProfileID>Z</cbc:ProfileID>
    <cbc:UUID>826964</cbc:UUID>
</Dummy>

Есть мысли о том, как это сделать?

1 Ответ

0 голосов
/ 05 июня 2018

Нет необходимости исключать CBC.Один раз попробуйте вот так:

exclude-result-prefixes="xs xd" version="2.0"> вместо exclude-result-prefixes="xs xd cbc " version="2.0">

...