package net.northking.cctp.element.xml;

import net.northking.cctp.element.core.AbstractLibrary;
import net.northking.cctp.element.core.annotation.Library;
import net.northking.cctp.element.core.type.LibraryConstant;
import net.northking.cctp.element.util.Javadoc2Libdoc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <p>这是一个用于验证和修改XML文档的测试组件库。</p>
 * XML组件库有以下主要用途：<br>
 * <li>
 * 获取元素的文本或属性（例如：getElement）。
 * </li>
 * <li>
 * 修改元素、添加元素（例如：setElement、addElement、removeElement）。
 * </li>
 * <br>
 * <span style="font-size: 120%;"><b>示例</b></span><br>
 * 下面的简单示例演示如何使用xpath表达式查找元素，以及返回的元素包含哪些属性。
 * <pre>
 * bookstore =>
 *
 * &lt;bookstore&gt;
 * 	&lt;book&gt;
 * 	  &lt;title lang="eng"&gt;Harry Potter&lt;/title&gt;
 * 	  &lt;price&gt;29.99&lt;/price&gt;
 * 	&lt;/book&gt;
 * 	&lt;book&gt;
 * 	  &lt;title lang="eng1"&gt;Learning XML&lt;/title&gt;
 * 	  &lt;price&gt;39.95&lt;/price&gt;
 * 	&lt;/book&gt;
 * &lt;/bookstore&gt;
 *
 * </pre>
 * <span style="font-size: 120%;"><b>xpath查找</b></span><br>
 * XPath 使用路径表达式来选取 XML 文档中的节点或节点集。<br>
 * <br>
 * <b>选取节点</b><br>
 * <table style="border-collapse:collapse" border="1" cellspacing="0" width="90%">
 * <tr>
 * <td width=250><b>表达式</b></td>
 * <td><b>描述</b></td>
 * </tr>
 * <tr>
 * <td>nodename</td>
 * <td>选取此节点的所有子节点。</td>
 * </tr>
 * <tr>
 * <td>/</td>
 * <td>从根节点选取。</td>
 * </tr>
 * <tr>
 * <td>//</td>
 * <td>从匹配选择的当前节点选择文档中的节点，而不考虑它们的位置。</td>
 * </tr>
 * <tr>
 * <td>.</td>
 * <td>选取当前节点。</td>
 * </tr>
 * <tr>
 * <td>..</td>
 * <td>选取当前节点的父节点。</td>
 * </tr>
 * <tr>
 * <td>*</td>
 * <td>匹配任何元素节点。</td>
 * </tr>
 * </table>
 * <br>
 * <b>常用实例</b><br>
 * <table style="border-collapse:collapse" border="1" cellspacing="0" width="90%">
 * <tr>
 * <td width=250><b>路径表达式</b></td>
 * <td><b>描述</b></td>
 * </tr>
 * <tr>
 * <td>/bookstore</td>
 * <td>选取根元素 bookstore。</td>
 * </tr>
 * <tr>
 * <td>//book</td>
 * <td>选取所有 book 子元素，而不管它们在文档中的位置。</td>
 * </tr>
 * <tr>
 * <td>bookstore//book</td>
 * <td>选择属于 bookstore 元素的后代的所有 book 元素，而不管它们位于 bookstore 之下的什么位置。</td>
 * </tr>
 * <tr>
 * <td>/bookstore/book[1]</td>
 * <td>选取属于 bookstore 子元素的第一个 book 元素。</td>
 * </tr>
 * <tr>
 * <td>/bookstore/book[price>35.00]</td>
 * <td>选取 bookstore 元素的所有 book 元素，且其中的 price 元素的值须大于 35.00。</td>
 * </tr>
 * <tr>
 * <td>/bookstore/*</td>
 * <td>选取 bookstore 元素的所有子元素。</td>
 * </tr>
 * </table>
 */
@Library(scanBasePackage = "net.northking.cctp.element.xml", infoClass = XMLLibrary.class)
public class XMLLibrary extends AbstractLibrary {

    private static final Logger logger = LoggerFactory.getLogger(XMLLibrary.class);
    private static final Javadoc2Libdoc JAVA_DOC_2_LIB_DOC = new Javadoc2Libdoc(XMLLibrary.class);
    private static final String NAME = "NK.XML";
    private static final String VERSION = "2.6";
    private static final String CH_NAME = "XML组件库";
    private static final Integer TYPE = LibraryConstant.LIB_TYPE_COMMON;

    @Override
    public String getName() {
        return NAME;
    }

    /**
     * 库中文名称
     */
    @Override
    public String getChName() {
        return CH_NAME;
    }

    @Override
    public String getVersion() {
        return VERSION;
    }

    /**
     * 组件库类别
     */
    @Override
    public Integer getType() {
        return TYPE;
    }

    @Override
    public Javadoc2Libdoc getLibDoc() {
        return JAVA_DOC_2_LIB_DOC;
    }

    @Override
    public void destroy() {
        logger.info("destroy done.");
    }
}