XML decoding and encoding-from cyber

示例Test.xml,内容如下


1

2

3

4

5

6

7

8

9

10

<staff content = "name and id">

    <member>

      <name>Arwen</name>

    <eno>123</eno>

  </member>

  <member>

      <name>Tom</name>

    <eno>456</eno>

  </member>  

</staff>

=============================================================
xml decode
使用xml decode方法将xml文件解析


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

decode_list_enterprise_request(xmldom.item (xmldom.getElementsByTagName (req_domdoc ,‘staff‘), 0));

FUNCTION decode_staff (p_node IN DBMS_XMLDOM.DOMNode ) RETURN

staff  IS

l_obj staff ;

l_children DBMS_XMLDOM.DOMNodeList ;

l_length INTEGER ;

l_i INTEGER ;

l_child DBMS_XMLDOM.DOMNode ;

l_name VARCHAR2 (32767);

BEGIN

    l_obj  := staff();

    l_children  := DBMS_XMLDOM.getChildNodes (p_node );

    l_length  := DBMS_XMLDOM.getLength (l_children );

    l_i  := 0;

    WHILE  l_i  < l_length

    LOOP

        BEGIN

            l_child  := DBMS_XMLDOM.item (l_children , l_i );

            IF  DBMS_XMLDOM.getNodeType (l_child )!= DBMS_XMLDOM.ELEMENT_NODE  THEN

                BEGIN l_i  := l_i  + 1; CONTINUE; END; END IF;

            l_name  := DBMS_XMLDOM.

                       getLocalName (DBMS_XMLDOM.makeElement (l_child ));

            IF  l_name  = ‘member‘ THEN

                BEGIN l_obj .member.add(decode_member(l_child )); END;

            END IF;

            l_i  := l_i  + 1;

        END;

    END LOOP;

    RETURN l_obj ;

END;

FUNCTION decode_member (p_node IN DBMS_XMLDOM.DOMNode ) RETURN

member  IS

l_obj member ;

l_children DBMS_XMLDOM.DOMNodeList ;

l_length INTEGER ;

l_i INTEGER ;

l_child DBMS_XMLDOM.DOMNode ;

l_name VARCHAR2 (32767);

BEGIN

    l_obj  := member();

    l_children  := DBMS_XMLDOM.getChildNodes (p_node );

    l_length  := DBMS_XMLDOM.getLength (l_children );

    l_i  := 0;

    WHILE  l_i  < l_length

    LOOP

        BEGIN

            l_child  := DBMS_XMLDOM.item (l_children , l_i );

            IF  DBMS_XMLDOM.getNodeType (l_child )!= DBMS_XMLDOM.ELEMENT_NODE  THEN

                BEGIN l_i  := l_i  + 1; CONTINUE; END; END IF;

            l_name  := DBMS_XMLDOM.

                       getLocalName (DBMS_XMLDOM.makeElement (l_child ));

            IF  l_name  = ‘name‘ THEN

                BEGIN l_obj .name := decode_string(l_child ); END;

            END IF;

            IF  l_name  = ‘eno‘ THEN

                BEGIN l_obj .eno := decode_string(l_child ); END;

            END IF;

            l_i  := l_i  + 1;

        END;

    END LOOP;

    RETURN l_obj ;

END;

FUNCTION decode_string (p_node IN DBMS_XMLDOM.DOMNode ) RETURN VARCHAR2  IS

l_children DBMS_XMLDOM.DOMNodeList ;

l_length INTEGER ;

l_i INTEGER ;

l_child DBMS_XMLDOM.DOMNode ;

l_char_data DBMS_XMLDOM.DOMCharacterData ;

BEGIN

    l_children  := DBMS_XMLDOM.getChildNodes (p_node );

    l_length  := DBMS_XMLDOM.getLength (l_children );

    l_i  := 0;

    WHILE  l_i  < l_length

    LOOP

        BEGIN

            l_child  := DBMS_XMLDOM.item (l_children , l_i );

            IF  DBMS_XMLDOM.getNodeType (l_child )

            = DBMS_XMLDOM.TEXT_NODE  THEN

                BEGIN

                    l_char_data  := DBMS_XMLDOM.makeCharacterData (l_child );

                    RETURN DBMS_XMLDOM.getData (l_char_data );

                END;

            END IF;

            l_i  := l_i  + 1;

        END;

    END LOOP;

    RETURN ‘‘;

END;

=============================================================
xml encode

FUNCTION encode_root_staff
(p_obj IN OUT staff ) RETURN DBMS_XMLDOM.DOMDocument  IS
l_response_node DBMS_XMLDOM.DOMNode ;
l_element DBMS_XMLDOM.DOMElement ;
l_node DBMS_XMLDOM.DOMNode ;
l_fcall_tmp DBMS_XMLDOM.DOMNode ;
BEGIN
    XmlResponse.response_doc  := DBMS_XMLDOM.newDOMDocument ();
    l_response_node := encode_staff (p_obj ,‘staff‘);
    l_element  := DBMS_XMLDOM.makeElement (l_response_node );
    l_node  := DBMS_XMLDOM.makeNode (XmlResponse.response_doc );
    l_fcall_tmp  := DBMS_XMLDOM.appendChild (l_node , l_response_node );
    DBMS_XMLDOM.setAttribute (l_element , ‘xmlns:ns2‘,
                              ‘http://edb.att.com/cci/v2.0‘)
    ;
    DBMS_XMLDOM.setAttribute (l_element , ‘xmlns:ns1‘,
                              ‘http://cio.att.com/CommonHeader/v2‘)
    ;
    RETURN XmlResponse.response_doc ;
END;

FUNCTION encode_staff
(p_obj IN OUT staff , p_tag IN VARCHAR2 ) RETURN
DBMS_XMLDOM.DOMNode  IS
l_element DBMS_XMLDOM.DOMElement ;
l_node DBMS_XMLDOM.DOMNode ;
l_fcall_tmp DBMS_XMLDOM.DOMNode ;
BEGIN
    l_element  := DBMS_XMLDOM.createElement (XmlResponse.response_doc ,p_tag );
    l_node  := DBMS_XMLDOM.makeNode (l_element );
    IF  p_obj  IS NOT NULL THEN
        BEGIN
            IF  p_obj .member.count >0 THEN
            for i in 1..p_obj .member.count
            loop
                BEGIN
                    l_fcall_tmp  := DBMS_XMLDOM.appendChild (l_node ,encode_member(p_obj .member,‘member‘));
                    END;
            end loop;
            END IF;
        END;
    END IF;
    RETURN l_node ;
END;

FUNCTION encode_member
(p_obj IN OUT member , p_tag IN VARCHAR2 ) RETURN
DBMS_XMLDOM.DOMNode  IS
l_element DBMS_XMLDOM.DOMElement ;
l_node DBMS_XMLDOM.DOMNode ;
l_fcall_tmp_1 DBMS_XMLDOM.DOMNode ;
l_fcall_tmp DBMS_XMLDOM.DOMNode ;
BEGIN
    l_element  := DBMS_XMLDOM.createElement (XmlResponse.response_doc ,p_tag );
    l_node  := DBMS_XMLDOM.makeNode (l_element );
    IF  p_obj  IS NOT NULL THEN
        BEGIN
            IF  p_obj .name IS NOT NULL THEN
                BEGIN
                    l_fcall_tmp  := DBMS_XMLDOM.appendChild (l_node ,encode_string(p_obj .name,‘name‘));
                    END;
            END IF;
            IF  p_obj .eno IS NOT NULL THEN
                BEGIN
                    l_fcall_tmp  := DBMS_XMLDOM.appendChild (l_node ,encode_string(p_obj .eno,‘eno‘));
                    END;
            END IF;
        END;
    END IF;
    RETURN l_node ;
END;

FUNCTION encode_string (p_obj IN VARCHAR2 , p_tag IN VARCHAR2 ) RETURN
DBMS_XMLDOM.DOMNode  IS
l_node4 DBMS_XMLDOM.DOMNode ;
l_fcall_tmp_1 DBMS_XMLDOM.DOMNode ;
l_fcall_tmp DBMS_XMLDOM.DOMNode ;
BEGIN
    l_node4  := DBMS_XMLDOM.
                makeNode (DBMS_XMLDOM.createElement (XmlResponse.response_doc ,
                                                     p_tag ));
    IF  p_obj  IS NOT NULL THEN
        BEGIN
            l_fcall_tmp  := DBMS_XMLDOM.appendChild (l_node4 ,
                                                     DBMS_XMLDOM.
                                                     makeNode (DBMS_XMLDOM.
                                                               createTextNode (XmlResponse.
                                                                               response_doc ,
                                                                               p_obj )));
        END;
    ELSE
        BEGIN
            l_fcall_tmp_1  := DBMS_XMLDOM.appendChild (l_node4 ,
                                                       DBMS_XMLDOM.
                                                       makeNode (DBMS_XMLDOM.
                                                                 createTextNode (XmlResponse.
                                                                                 response_doc ,
                                                                                 ‘ ‘)));
        END;
    END IF;
    RETURN l_node4 ;
END;
时间: 2024-11-10 01:26:42

XML decoding and encoding-from cyber的相关文章

XML乱码问题和encoding的理解

文件编码 文件编码也称为字符编码,用于指定在处理文本时如何表示字符.一种编码可能优于另一种编码主要取决于它能处理或不能处理哪些语言字符,不过通常首选的是 Unicode.读取或写入文件时,未正确匹配文件编码的情况可能会导致发生异常或产生不正确的结果. 编码类型 处理文件时,Unicode 是首选编码.Unicode 是全球范围的字符编码标准,该标准使用 16 位代码值来表示现代计算中使用的所有字符,包括印刷中使用的技术符号和特殊字符. encoding属性和文件格式的关系 我以前理解的是xml里

xml中encoding

前同天和同事在讨论xml里的encoding属性和文件格式的关系,终于彻底的弄清楚了.以前理解的是,xml里的encoding里定义必须与文件格式相匹配.即有这样的xml Introduction<? xml encoding="utf-8" .. ?>,那么,文件格式必须是一个utf-8文件,即文件的前两个字节要是一个utf-8头FF FE.(后来才弄清楚,FF FE不是utf-8的BOM..就是说我的错误理解持续了相当长一段时间..)下面把讨论的几个阶段大概说一下.刚开

小哈学Python ----XML

XML XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下: <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> <gdppc>141100</gdppc> <neighbor direction="E" nam

XML.01-语法简介

body,td { font-family: calibri; font-size: 10pt } XML.01-语法简介 文档声明 元素(标签) 属性 注释 特殊字符 CDATA区域 处理指令 啥是XML? xml (Extensible Markup Language)可扩展的标记语言,顾名思义,XML最重要的两个因素: 可扩展 标签,可以自定义的标签 XML可以看作是HTML的一个超集,但是,两者设计的目的是不一样的. HTML的设计目的是显示信息,而XML的设计目的是传输信息. XML干

C#-XML

XML用处 存储配置文件,存储数据用于远程传输等..net提供了system.xml命名空间的类,用于读写xml文件(XmlTextReader.XmlWriter),分析xml文件结构(XmlNode.XmlDocument),转换xml文件格式成其他格式文件(XmlTransform),用xml类处理数据,用XPath类在xml文件查询. 理解XML XML.SGML通用标记语言的子集,这语言派生出HTML和XML.XML是与人工可读元数据相结合的人工可读数据.元素,包含一对标签和一个值.x

XML详解:第三部分 XML解析

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4290918.html XML解析... 72 使用DOM解析XML. 73 DOM树中的节点类型... 75 文档节点Document75 元素节点Element77 文本节点Text77 属性节点Attr78 NodeList接口...

[python标准库]XML模块

1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息. XML有以下几个特点. XML的设计宗旨是传输数据,而非显示数据. XML标签没有被预定义.您需要自行定义标签. XML被设计为具有自我描述性. XML是W3C的推荐标准. 其解析流程如下图: 2.常用解析XML的Python包 Python的标准库中,提供了6种

C#操作XML的方法

C# XML XmlDocument地址:http://www.cnblogs.com/txw1958/archive/2013/01/16/csharp-xml.html 添加命名空间: using System.Xml; 定义公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlElement xmlelem ; 1,创建到服务器同名目录下的xml文件: 方法一: xmldoc = new XmlDocument ( ) ; //加入XML的声明段落

Python自动化运维之10、模块之json、pickle、XML、PyYAML、configparser、shutil

序列化 Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load json模块 # json()将字符串形式的列表或字典转换为list或dict类型,json是所有语言相互通信的方式# 注意外层字符形式