新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → xml学习学(bianji) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5815 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: xml学习学(bianji) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     cvbnm001 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:78
      门派:XML.ORG.CN
      注册:2006/9/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cvbnm001发送一个短消息 把cvbnm001加入好友 查看cvbnm001的个人资料 搜索cvbnm001在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cvbnm001的博客楼主
    发贴心情 xml学习学(bianji)

    当前,Internet 已有了广泛接受的可视化显示标准,但并没有Web数据信息的理解标准,以便软件能够更好地搜索、移动、显示和处理上下文中隐藏的信息。
          HTML 是一种描述如何表示 Web 页的格式,HTML 不能表示例如:将处方发送到药剂师的标准方式;搜索法律图书馆中有关某一主题的所有诉讼文档的标准方式;这些格式定义。

    XML(Extensible Markup Language),一种"扩展性""标识""语言"。

    扩展性:在HTML里,你不能使用HTML规范里没有的标记。而在XML中,你能自定义你需要的标记。
    标识:文档在计算机看来只是一个很长的字符串,没有标识,每个字看起来都一样,没有重点之分。XML可以标识文档中的元素,甚至建成树型结构 。
    语言:即XML虽然允许自定义新标识,但还是必须遵循一定的规则。

    强化的Meta:Meta在html中用来为搜索引擎机器人提供信息,如关键字和网页描述。
    <HEAD> <Meta name="Keywords" Content="关键词1,关键词2,……"> <TITLE> ........ </HEAD> </TITLE>
           <Meta name="Description" Content="网页的简述">
           <Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow">
     告诉搜索机器人Robots (机器人向导)页面权限
       all:文件将被检索,且页面上的链接可以被查询;
          none:文件将不被检索,且页面上的链接不可以被查询;
                                              (和 "noindex, no follow" 起相同作用)
          index:文件将被检索;(让robot/spider登录)
          follow:页面上的链接可以被查询;
       .........

          显示:XML是将数据和格式分离的,XML文档本身不知道如何来显示(XML取消了所有font,color,p等风格样式定义标识),它的标识仅仅是用来识别信息,它本身并不传达信息,也不传达显示信息.
     所以必须有辅助文件来帮助设定显示风格.比如CSS或者XSL.

    DOM :document object model(文档对象模型),把文档(str流)看成对象,DOM就是该HTML/XML文档对象的API----操作集。


    我们来了解XML文档中有关的术语:

    <?xml version="1.0" standalone="no" encoding="UTF-8"?>

    <!DOCTYPE filelist SYSTEM "filelist.dtd">

    <filelist>

    <myfile>

    <title>QUICK START OF XML</title>

    <author>ajie</author>        <!-- 这里是注释信息 -->

    </myfile>

    ......

    </filelist>
    -----------------------------
    <author>ajie</author>      Element(元素)
    <author>                   Tag(标识)
    ajie      元素内容


    xml的语法:  
    大小写敏感
    给属性值加引号,当然,在XML中,属性只是对标识的描述,与元素内容的显示无关
    标识成对出现,标识对之间没有内容的标识在原标识最后加/,例如:<IMG src= "cool.gif">应写为<IMG src= "cool.gif" />

    <?xml version="1.0" standalone="no" encoding="UTF-8"?>
        Declaration(声明)
                    ?xml              声明这个是XML文档;
                    version="1.0"     文档遵守的XML规范的版本;
                    standalone="no"   文档附带DTD文件;
                    encoding="UTF-8"  文档所用的语言编码

    <!DOCTYPE filelist  SYSTEM/PUBLIC "filelist.dtd">
       调用XML所需DTD的声明
                    !DOCTYPE           声明要定义一个DOCTYPE;
                    filelist          是文档类型的名称,自定义,通常与DTD文件名相同;
                    SYSTEM/PUBLIC     这两个参数只用其一。SYSTEM是指文档使用的私有DTD
                                  文件的网址,而PUBLIC则指文档调用一个公用的DTD文件的网址。
                    "filelist.dtd"    就是DTD文件的网址和名称。后缀名为".dtd"。

    <!-- 这里是注释信息 -->    注释信息,不会被程序解释或浏览器显示

         在XML中,已有特殊的含义字符,比如"<",若要显示利用CDATA. 例如:<![CDATA[<AUTHOR sex="female">ajie</AUTHOR>]]>
         但<![CDATA[...]]>只能在元素体之间,如:
          <?xml...>  <![CDATA[...]]>  <element>...</element>  会出错。
     
          在一个XML文档中使用多个DTD文件,不同的DTD文件中,标识名可能相同但表示的含义不同,这就引起数据混乱。所以引进了namespaces这个概念。
          声明如下:<document xmlns:自定义namespaces名='URL'>  后面的标识中使用定义好的名字空间,<自定义namespaces名:Tag>***</Tag>以区分另一个<Tag>
         注意URL并不是说这个标识真的要到那个网址去读取,仅仅作为一种区别的标志而已,不过形式是网址的格式,因为网址在world wide唯一.

          entity类似word中的"宏",可以预先定义然后在文档中多次调用.声明:
          <!DOCTYPE *** [<!ENTITY *** "内容">]>,调用则是  &***;

          DTD是一种保证XML文档格式正确的有效方法,可以比较XML文档和DTD文件来看文档是否符合规范,将XML文档和它的DTD文件进行比较分析,看是否符合DTD规则的过程叫validation(确认)。这样的过程通常我们是通过一个名为parser的软件来处理的。
    为什么要用DTD文件呢?也许是它满足了网络共享和数据交互,使用DTD最大的好处在于DTD文件的共享。(就是上文DTD说明语句中的PUBLIC属性)。比如,两个相同行业不同地区的人使用同一个DTD文件来作为文档创建规范,那么他们的数据就很容易交换和共享。网上有其他人想补充数据,也只需要根据公用的DTD规范来建立文档,就立刻可以加入。
    DTD的语法:
                    <!ELEMENT myfile (title, author)>
                    <!ELEMENT title (#PCDATA)>
                    <!ELEMENT author (#PCDATA)>
                                  <!ELEMENT         是元素的声明,说明你要定义的是一个元素
                                        ***
                                  (#PCDATA, DEFINITION)>    是该元素的使用规则,定义了元素
                                                                         可以包含的内容以及相互的关系

             (#PCDATA)  元素***是包含字符或文本的
             (a1,a2,a3) 元素***的元素内容是顺次包含a1,a2,a3三个子节点,但无文本
             (#PCDATA,a1,a3) 元素***包含文本内容和a1,a2子节点
             (#PCDATA|a1|a2) 元素***包含两个子节点中一个或文本
              (a1?) (a1) (a1+) (a1*) 包含节点,不使用或一次,只用一次,一次或多次

       学过《编译原理》的应该对正则表达式都非常理解,这里用法相同。

                       元 字 符        含    义

                      +         出现一次或多次
                      *         出现零次或多次
                      ?        可选,不出现或出现一次
                    ()       一组要共同匹配的表达式
                      |            OR,或
                      ,        AND,要求严格遵从顺序要求
                     元素A
                     元素B
                     元素C    元素列表,无须遵从顺序要求


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/22 17:26:00
     
     cvbnm001 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:78
      门派:XML.ORG.CN
      注册:2006/9/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cvbnm001发送一个短消息 把cvbnm001加入好友 查看cvbnm001的个人资料 搜索cvbnm001在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cvbnm001的博客2
    发贴心情 
    IXMLDOMNode 成员:私元:
       nodeName         
       nodeType         该Node是DOM的什么类型:DOM、Element、Attr、CDATA、Section
       attributes
       nodeValue  和Node联系的text
       definition              DTD或schema对该节点的定义
       ownerDocument  返回根Node IXMLDOMDocument
       parentNode              父Node
       previousSibling         上一个兄弟Node
       nextSibling  下一个兄弟Node
       childNodes              一个Node List包含所有子Node
       firstChild 
       lastChild 
       namespaceURI
       baseName         返回namespace-qualified name的右边。如<xxx:yyy>返回"yyy".
       dataType
     字符串都是BSTR,大部分为只读:HRESULT get_##(BSTR *##);
              HRESULT put_##(BSTR ##);   

         操作:#define IXMLDOMNode   ' '
        HRESULT appendChild  (*addChild,         **outChild);
          cloneNode    (VARIANT_BOOL deep, **cloneRoot);  deep,为ture则以该节点为根,克隆整棵树
          hasChildNodes(VARIANT_BOOL       *hasChild);                  VARIANT_BOOL为ture则有子节点
         insertBefore (*newChild,VARIANT refChild, **outNewChild);将新Node加入指定位置refChild的左边或List的末尾
         removeChild  (*childNode,        **outOldChild);
         replaceChild (*newChild, *oldChild,  **outOldChild);
                                     selectNodes( BSTR XPath ,IXMLDOMNodeList **resultList);
         selectSingleNode( BSTR XPath ,    **resultNode);
         transformNode(*stylesheet, BSTR *xmlString);    XSLT 风格
    IXMLDOMDocument  成员
      createElement、createTextNode、getElementsByTagName、load*、loadXML*、save*、

    TreeCtrl 树控件,以树结构包含项Item    CTreeCtrl* pmyTreeCtrl;
           HTREEITEM hmyItem;

    Item项的信息有文本、状态、图像、子项计数等,CTreeCtrl有许多检索和设置项信息的成员函数:
     GetItemState(被选定状态、禁用状态、展开状态等)、GetItemText、GetItemData、GetItemImage、
     GetItemHeight(所有节点的Image高)、GetItem( struct  TVITEM) 存储很多节点信息的结构体 
     GetEditControl      获得编辑节点text的CEdit控件的handle    CEdit* pEdit = myTreeCtrl->GetEditControl();
               pEdit->CEdit的操作;
     GetItemRect (检索树控件项的边框)
     GetCount(检索树控件中的项计数)  GetVisibleCount (检索树控件窗口中当前可见项的计数)


    用于在树中遍历项的函数:
     GetChildItem(hmyItem)、GetRootItem、GetFirstVisibleItem、GetNextVisibleItem、GetPrevVisibleItem、
     GetNextSiblingItem、GetPrevSiblingItem、GetParentItem、GetSelectedItem 和 GetDropHilightItem。
     GetNextItem (hmyItem, nCode)
      检索与hmyItem项有指定关系的树控件项,例如父项、前一个或下一个可见项、第一个子项等,由nCode指定.
      pTreeCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT |TVGN_CARET |TVGN_ROOT);
     set....
    树控件项的操作:
     DeleteAllItems()、 DeleteItem(hmyItem)、EditLabel(hmyItem)  定义项的标签、ItemHasChildren(hmyItem)、
     EnsureVisible将该项设为可显示 、
     Select(hmyItem,TVGN_CARET |TVGN_DROPHILITE |TVGN_FIRSTVISIBLE)、SelectItem(hmyItem)、

     HTREEITEM InsertItem(                                    
          UINT nMask,               项参数,struct  TVITEM的mask
        LPCTSTR lpszItem,    项标签text
        int nImage,     图片链表号
        int nSelectedImage,    图片链表中的图片号 
        UINT nState,     项状态码
        UINT nStateMask,
        LPARAM lParam,     与项相联系的32-bit应用程序,如某文件夹
          HTREEITEM hParent,        insert项位置
          HTREEITEM hInsertAfter
       );

    如果要使用图像,调用 SetImageList 设置图像列表,SetIndent 调整缩进。
    排序调用 SortChildren(hmyItem),可按照字母顺序对hmyItem子项列表排序。SortChildrenCB(struct TVSORTCB) 自定义标准(排序函数)

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/22 17:28:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/5 18:24:41

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    140.625ms