`
Tonyguxu
  • 浏览: 279675 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

创建构造良好的XML

 
阅读更多
  • 元素(Element)
  1. 根元素
  2. 嵌套元素:如﹤ingredlist﹥ 元素内部包含多个子元素 ﹤listitem﹥。
  • 属性(Attribute)

如果要对文档分类,属性尤其有用,比如按照菜谱的 type 进行分类。

 

  • dom4j


dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

 

dom4j通过xpath查询xml

使用dom4j的xpath操作xml文件,需要两个包:dom4j.jar和jaxen.jar,否则在运行操作xpath的程序中,会出现ClassNotFoundException的异常。

  1. 获取Document
    SAXReader saxReader = new SAXReader();  
    Document document = saxReader.read(FileUtil.getFileInputStream(fileName));  
  1. 查询Element
String xpath ="/composites/composite[@type='onDelete']";//查询属性type='ondDelete'的composite  
List<Element> composites = document.selectNodes(xpath);
  1. xpath语法
  • 选取节点

XPath 使用路径表达式在 XML 文档中选取节点 。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点
/bookstore

选取根元素 bookstore

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book 选取所有属于 bookstore 的子元素的 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择所有属于 bookstore 元素的后代的 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取所有名为 lang 的属性。
  • 谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00。
  • 选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子节点
//* 选取文档中的所有元素
//title[@*] 选取所有带有属性的 title 元素。
  • 选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取所有 book 元素的 title 和 price 元素。
//title | //price 选取所有文档中的 title 和 price 元素。
/bookstore/book/title | //price 选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素。

 

  • XPath 轴

轴可定义某个相对于当前节点的节点集。

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute 选取当前节点的所有属性
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
self 选取当前节点。
  • 位置路径表达式

位置路径可以是绝对的,也可以是相对的。

绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对位置路径:

/step/step/...

相对位置路径:

step/step/...

每个步均根据当前节点集之中的节点来进行计算。

步(step)包括:

轴(axis)
定义所选节点与当前节点之间的树关系
节点测试(node-test)
识别某个轴内部的节点
零个或者更多谓语(predicate)
更深入地提炼所选的节点集

步的语法:

轴名称::节点测试[谓语]

实例

例子 结果
child::book 选取所有属于当前节点的子元素的 book 节点
attribute::lang 选取当前节点的 lang 属性
child::* 选取当前节点的所有子元素
attribute::* 选取当前节点的所有属性
child::text() 选取当前节点的所有文本子节点
child::node() 选取当前节点的所有子节点
descendant::book 选取当前节点的所有 book 后代
ancestor::book 选择当前节点的所有 book 先辈
ancestor-or-self::book 选取当前节点的所有book先辈以及当前节点(假如此节点是book节点的话)
child::*/child::price 选取当前节点的所有 price 孙。

 

XPath 运算符

下面列出了可用在 XPath 表达式中的运算符:

运算符 描述 实例 返回值
| 计算两个节点集 //book | //cd 返回所有带有 book 和 ck 元素的节点集
+ 加法 6 + 4 10
- 减法 6 - 4 2
* 乘法 6 * 4 24
div 除法 8 div 4 2
= 等于 price=9.80

如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 fasle。

!= 不等于 price!=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 fasle。

< 小于 price<9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 fasle。

<= 小于或等于 price<=9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 fasle。

> 大于 price>9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 fasle。

>= 大于或等于 price>=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 fasle。

or price=9.80 or price=9.70

如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 fasle。

and price>9.00 and price<9.90

如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 fasle。

mod 计算除法的余数 5 mod 2 1

 

 

 

 

分享到:
评论

相关推荐

    C#中创建新的XML

    - **创建XmlTextWriter实例**:使用`XmlTextWriter`类创建一个新实例`zph`,并将文件路径和编码设置为其构造函数参数。`Encoding.Default`表示使用系统默认的编码格式(通常是ANSI编码)。 ```csharp zph....

    C# LinqXML使用LINQ技术创建XML文件

    我们可以直接通过`XElement`构造器创建元素,并添加子元素或属性。例如,创建一个简单的XML结构: ```csharp XElement root = new XElement("Students", new XElement("Student", new XAttribute("ID", "1"), ...

    spring之xml配置对象创建的三种方式代码

    总结来说,Spring通过XML配置提供了灵活的对象创建方式,包括单例、原型和工厂方法,以及构造参数和属性注入。这使得开发者可以根据需求定制bean的生命周期和依赖关系,增强了代码的可维护性和可测试性。在实际开发...

    C# 读取文件名构造XML文件并生成Tree

    在这个项目中,我们聚焦于一个特定任务:从文件夹中读取文件名,利用这些文件名构造XML文件,并基于XML生成一个树形结构。当用户点击树的叶子节点时,相关文件的图片会得以显示。这个过程涉及到了多个关键知识点,...

    (第十章)一个xml解析器和构造器

    XML构造器是用来创建XML文档的对象,它可以将程序中的数据结构转换为XML格式。常见的XML构造器有DOMWriter和SAXSerializer,分别对应DOM和SAX的输出方式。 1. DOMWriter:基于DOM的构造器,它能够将DOM树转换为XML...

    根据XML模版自动生成

    3. **XML文件构造**:使用编程语言(如Java、Python、C#等)的XML库(如DOM、SAX、XMLStreamWriter等)创建XML文件。这些库提供了API,用于添加、修改和删除XML元素及属性,从而根据模板填充数据。 - DOM...

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的方法;作为元素和节点的基类调用 3、IXMLDOMAttribute类:就是元素或节点的属性类 4...

    pugixml读写XML示例

    1. **创建新的XML文档**:使用`pugi::xml_document`的构造函数创建一个空文档。 2. **添加元素和属性**:通过`append_child()`和`append_attribute()`方法创建元素和属性。例如: ```cpp pugi::xml_document doc; ...

    解析并创建XML文件和Java的反射

    - 使用`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.parsers.DocumentBuilder`来创建解析器实例。 - `DocumentBuilder.parse()`方法用于解析XML文件并返回一个`Document`对象。 - `Document`对象提供...

    C# 开发的可视化xml编辑器

    # 可视化xml编辑器 #### 介绍 可视化xml文件生成和修改器 可以更改xml中的元素名称,文本,属性(属性的名字,值) 可以从xml文件中导入,进行编辑并保存。或者直接创建一个xml文件 ...支持复制构造xml元素

    C# 方式生成xml格式字符串

    生成xml格式字符串、序列化XML 对象=》XML文本、反序列化 XML文本=》对象 等方法,对象和xml之间的相互转换、datatable方式转换为xml文本的工具类方法 C#语言

    spring的setter注入和构造注入(XML讲解以及常见错误)

    本篇将详细讲解setter注入和构造注入这两种常见的DI方式,并结合XML配置进行解析,同时讨论可能遇到的常见错误。 setter注入是Spring中最常用的注入方式之一。通过在类中定义setter方法,Spring容器可以在创建对象...

    Spring设值注入和构造注入(通过xml).zip

    本资料主要关注两种注入方式:设值注入(Setter Injection)和构造注入(Constructor Injection),并通过XML配置文件进行管理。 设值注入是通过setter方法来注入依赖的。首先,我们需要在类中声明需要注入的属性,...

    xml创建,用XDocument来写的

    2. **实例化XDocument**:接下来,通过XDocument类的构造函数来创建一个XDocument对象。如示例所示,我们可以通过传递XElement对象作为参数来实例化XDocument。在这个例子中,“RootElement”被定义为根元素,其下有...

    FLASH+XML构造下拉菜单 fla源文件

    //创建一个新的空 XML 对象 var my_xml:XML = new XML(); //取消空白节点输出 my_xml.ignoreWhite = true; //加载xml my_xml.load("http://www.taoshaw.com/taoshaw/study/xml_listxiala/List.xml"); //判断是否加载...

    XmlOutPutFile_xml_

    - `XDocument`的构造函数可以接受一个XML字符串或者另一棵XElement树来初始化XML文档。 - 使用`XDocument.Load()`方法可以从文件加载XML,`XDocument.Parse()`则可以从字符串加载。 - 创建XML元素使用`XElement()...

    c++用tinyxml库操作xml

    4. **创建新的XML元素**:如果你需要创建新的XML结构,可以使用`TiXmlElement`的构造函数,传入元素名称。之后,可以添加属性和子元素,最后将新元素插入到已有的XML树中。 5. **写入XML文件**:完成对XML结构的...

    unity3d读取xml插件Mono.Xml

    通过构造函数可以创建一个SimpleXmlDocument对象,并传入XML文件的路径,例如: ```csharp using System.IO; using Mono.Xml; SimpleXmlDocument xmlDoc = new SimpleXmlDocument(); xmlDoc.Load(new FileInfo(...

Global site tag (gtag.js) - Google Analytics