ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ajax---XML

2021-09-07 21:03:29  阅读:110  来源: 互联网

标签:XML --- Ajax book let println id out


Ajax--XML

XML简介

• XML 指可扩展标记语言(EXtensible Markup Language)
• XML 是一种标记语言,很类似 HTML
• XML 的设计宗旨是传输数据,而非显示数据
• XML 标签没有被预定义。您需要自行定义标签。
• XML 被设计为具有自我描述性。
• XML 是 W3C 的推荐标准

XML和HTML的差异:

• XML 不是 HTML 的替代。
• XML 和 HTML 为不同的目的而设计:
• XML 被设计为传输和存储数据,其焦点是数据的内容。
• HTML 被设计用来显示数据,其焦点是数据的外观。
• HTML 旨在显示信息,而 XML 旨在传输信息。

xml文档

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book>
    <author>罗伯特</author>
    <bookname>杀死一只知更鸟</bookname>
    <id>88</id>
    <publisher>译林出版社</publisher>
</book>

语法规则

• 所有 XML 元素都须有关闭标签
• XML 标签对大小写敏感
• XML 必须正确地嵌套
• XML 文档必须有根元素
•XML 的属性值须加引号
• 元素名称不能以数字和"_"(下划线)开头、不能以XML开头、不能包含空格与冒号
•HTML中的转义符在XML中也可以使用,如果文本中需要转义的字符太多,还可以使用 “<![CDATA[ 需要转义的文本 ]]>”进行转义

JavaScript 解析XML API

名称/类型作用
getElementsByTagName(name)/方法返回当前元素中有指定标记名的子元素数组
childNodes/属性返回当前元素所有子元素的数组
nodeValue/字符串获取节点值:如果节点为元素,返回null或 undefined;如果节点为文本,返回文本值
getAttribute(name)/方法返回元素的属性值,属性有name指定

使用JAXB生成XML文档

servlet中

		BookService bookService = new BookService();
        List<Book> bookList = bookService.findAll();
        XmlBookList xmlBookList = new XmlBookList();
        xmlBookList.setBookList(bookList);

       JAXBContext ctx = null;
        try {
            ctx = JAXBContext.newInstance(XmlBookList.class);
            Marshaller marshaller = ctx.createMarshaller();
            //格式化输出
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            //输出中文编码
            marshaller.setProperty(Marshaller.JAXB_ENCODING,"GBK");
            marshaller.marshal(xmlBookList, resp.getOutputStream());
        } catch (JAXBException e) {
            e.printStackTrace();
        }

注解

@XmlRootElement
public class Book {}


@XmlRootElement(name="bookList")
public class XmlBookList {

    private List<Book> bookList;

    public List<Book> getBookList(){
        return bookList;
    }

    @XmlElement(name="book")
    public void setBookList(List<Book> bookList){
        this.bookList = bookList;
    }
}

@XmlAttribute public void setId(int id) { this.id = id; }

忽略属性
@XmlTransient public void setAddress(Address address) { this.address = address; }

服务器返回xml代码

        response.setContentType("text/xml");
        PrintWriter out = response.getWriter();
        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        out.println("<books>");
        out.println("<book ISBN=\"5197-5742-5657\">");
        out.println("<name>Java编程思想</name>");
        out.println("<price>91.5</price>");
        out.println("<authors>");
        out.println("<author>");
        out.println("<name>汤姆斯</name>");
        out.println("<nation>美国</nation>");
        out.println("</author>");
        out.println("<author>");
        out.println("<name>杰西姆</name>");
        out.println("<nation>美国</nation>");
        out.flush();
        out.close();

Ajax接收返回的XML文档(script)

单个对象:

 /**
     * ajax请求回调函数
     */
    function callback() {
        // alert(xmlHttp.readyState);//状态码 0-4
        if(xmlHttp.readyState == 4){
            if(xmlHttp.status == 200){

                var result = xmlHttp.responseXML;
                console.log(result);
                let book = result.getElementsByTagName("book")[0];
                let bookName = book.getElementsByTagName("bookname")[0].childNodes[0].nodeValue;
                let author = book.getElementsByTagName("author")[0].childNodes[0].nodeValue;
                let publisher = book.getElementsByTagName("publisher")[0].childNodes[0].nodeValue;
                let id = book.getElementsByTagName("id")[0].childNodes[0].nodeValue;
                let obj = {
                    id: id,
                    bookName: bookName,
                    author: author,
                    publisher: publisher
                }
                createHtml(obj);

                // var result = xmlHttp.responseText;//响应"添加成功"的文本
                // alert(result);
            }else {
                // alert(xmlHttp.status);
                alert("服务器升级中!")//除200之外的状态码
            }
        }
        }

一个集合:

function callback() {
 if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                var xmlObj = xmlHttp.responseXML;

                let bookList = xmlObj.getElementsByTagName("book");

                for (var index in bookList) {

                    let book = bookList[index];

                    let bookName = book.getElementsByTagName("bookname")[0].childNodes[0].nodeValue;
                    let author = book.getElementsByTagName("author")[0].childNodes[0].nodeValue;
                    let publisher = book.getElementsByTagName("publisher")[0].childNodes[0].nodeValue;
                    let id = book.getElementsByTagName("id")[0].childNodes[0].nodeValue;
                    let obj = {
                        id: id,
                        bookName: bookName,
                        author: author,
                        publisher: publisher
                    }
                    createHtml(obj);
                }
            } else {
                alert("服务器升级中!");
            }
        }
    }

创建标签:

/*创建标签*/
    function createHtml(data) {
        let tr = document.createElement("tr");
        let idTd = document.createElement("td");
        let nameTd = document.createElement("td");
        let authorTd = document.createElement("td");
        let publTd = document.createElement("td");

        let textId = document.createTextNode(data.id);
        let textName = document.createTextNode(data.bookName);
        let textAuthor = document.createTextNode(data.author);
        let textPub = document.createTextNode(data.publisher);

        idTd.appendChild(textId);
        nameTd.appendChild(textName);
        authorTd.appendChild(textAuthor);
        publTd.appendChild(textPub);

        tr.appendChild(idTd);
        tr.appendChild(nameTd);
        tr.appendChild(authorTd);
        tr.appendChild(publTd);

        let tbody = document.querySelector("#tab");
        tbody.appendChild(tr);
    }

XML的验证—DTD

“*”代表子元素可以出现0到多次;
“+”代表子元素可以出现1到多次;
“?”代表子元素可以出现一次、也可以不出现; 如果没有修饰,代表子元素必须出现1次。

标签:XML,---,Ajax,book,let,println,id,out
来源: https://blog.csdn.net/weixin_44889526/article/details/120166211

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有