XSLT序列化一个完整的XSD

时间:2016-04-16 12:01:02

标签: xslt serialization xsd

基于SO提供的关于XSLT: How to convert XML Node to String中的序列化的解决方案之一,我试图序列化这样的事情。

 $scope.sms = {};
    var options = {
        replaceLineBreaks: false, // true to replace \n by a new line, false by default
        android: {
            intent: '' // send SMS with the default SMS app
        }
    };
    $scope.smsSend = function () {
        console.log($scope.sms.phno);
        console.log($scope.sms.msg);
        document.addEventListener("deviceready", function () {
            $cordovaSms
                .send($scope.sms.phno, $scope.sms.msg, options)
                .then(function () {
                    // Success! SMS was sent
                    console.log('Success');
                }, function (error) {
                    // An error occurred
                    console.log(error);
                }); //then
        });
    };

由于我刚刚开始使用XSLT,我似乎无法找到一个包含命名空间和注释的解决方案。我试图在没有任何信息丢失的情况下包含所有内容,我想出了这个XSLT。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" elementFormDefault="qualified">
    <xs:annotation>
        <xs:documentation>
            Package Name:    Master
            version:  2
            Description: 
                This is a dummy description used for testing purposes.
        </xs:documentation>
    </xs:annotation>
      <!-- ********************************************************************************************************************
    ***         Includes
    *************************************************************************************************************************-->
    <!-- Basic Layer -->
    <xs:include schemaLocation="dummy1.xsd"/>
    <xs:include schemaLocation="dummy2.xsd"/>
    <!-- ********************************************************************************************************************
    ***         Simple Types
    *************************************************************************************************************************-->
    <xs:simpleType name="YESNO">
        <xs:restriction base="xs:string">
            <xs:enumeration value="YES"/>
            <xs:enumeration value="NO"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ********************************************************************************************************************
    ***         Simple Types
    *************************************************************************************************************************-->
    <xs:complexType name="Custom" xdb:SQLType="L2A_CUSTOM_OT">
        <xs:sequence>
            <xs:element name="Postal" type="TPostal" />
            <xs:element name="Entry" type="Entry" minOccurs="0" maxOccurs="8" />
        </xs:sequence>
    </xs:complexType>    
</xs:schema>

1 个答案:

答案 0 :(得分:2)

有关纯XSLT 1.0解决方案的信息,请参阅http://lenzconsulting.com/xml-to-string/,或者考虑是否可以使用具有XP {3.0支持https://www.w3.org/TR/xpath-functions-30/#func-serialize的Saxon 9.7等XSLT处理器来使用serialize函数。

请注意,您所显示的方法并未考虑转义,例如<在属性值或文本节点中为&lt;。因此,任何需要将结果解析为XML的人都可能会在这里询问如何强制XML解析器接受未转义的less than&lt;)符号或未转义的ampersand&amp; )符号。