提交 fb06b956 编写于 作者: W wizardforcel

2020-06-10 16:10:17

上级 185a6af4
......@@ -26,7 +26,7 @@ Output:
[Java 语言规范](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html "jlsr")指出:
形式为`E1 op= E2`的复合赋值表达式与`E1 = (T)((E1) op (E2))`**等效,其中 T 为 E1** 的类型,不同之处在于 E1 仅被评估一次。
形式为`E1 op= E2`的复合赋值表达式与`E1 = (T)((E1) op (E2))`**等效,其中 T 为 E1** 的类型,不同之处在于 E1 仅被求值一次。
因此,可以有效地将我们的原始示例代码重写如下:
......
......@@ -22,7 +22,7 @@
#### 1.2 [对象初始化最佳做法](//howtodoinjava.com/java/related-concepts/object-initialization-best-practices-internal-caching-in-wrapper-classes/)
在 Java 中,**对象初始化**被认为是一个繁重的过程,您应该了解每个新创建的对象如何影响内存和应用性能。 一个简单的例子是 Java 包装器类,它从外部看起来很简单,就像**原**一样,但是它们并不像它们看起来那么简单。 了解 Java 如何在包装类(例如`Double``Long``Integer`)内对对象进行内部缓存。
在 Java 中,**对象初始化**被认为是一个繁重的过程,您应该了解每个新创建的对象如何影响内存和应用性能。 一个简单的例子是 Java 包装器类,它从外部看起来很简单,就像**原始类型**一样,但是它们并不像它们看起来那么简单。 了解 Java 如何在包装类(例如`Double``Long``Integer`)内对对象进行内部缓存。
#### 1.3 [HashMap 在 Java 中的工作方式](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/ "How hashmap works in java")
......
......@@ -141,7 +141,7 @@ final int hash;
因此,在发生碰撞的情况下,`Entry`对象以`LinkedList`形式存储。 当`Entry`对象需要存储在特定索引中时,`HashMap`检查是否已经有一个条目? 如果尚无条目,则`Entry`对象存储在此位置。
如果已经有一个对象位于计算索引上,则检查其`next`属性。 如果为**,则为**,并且当前`Entry`对象成为`LinkedList`中的`next`节点。 如果`next`变量不为空,则遵循步骤直到`next`被评估为空。
如果已经有一个对象位于计算索引上,则检查其`next`属性。 如果为**,则为**,并且当前`Entry`对象成为`LinkedList`中的`next`节点。 如果`next`变量不为空,则遵循步骤直到`next`被求值为空。
如果我们添加另一个具有与之前输入相同的键的值对象,该怎么办。 从逻辑上讲,它应该替换旧值。 怎么做的? 好吧,在确定`Entry`对象的`index`位置之后,在对计算索引上的`LinkedList`进行迭代时,`HashMap`为每个`Entry`对象调用关键对象上的`equals()`方法。 `LinkedList`中的所有这些`Entry`对象将具有相似的哈希码,但`equals()`方法将测试真实相等性。 如果 **key.equals(k)**为 true,则两个键都被视为相同的键对象。 这将仅导致替换`Entry`对象中的 value 对象。
......
......@@ -71,8 +71,8 @@ object.wait()将当前线程发送到“ Not Runnable”状态,就像 sleep()
&是按位的,& &是逻辑的。
* &评估操作的双方。
* & &评估操作的左侧,如果是,则继续并评估右侧。
* &求值操作的双方。
* & &求值操作的左侧,如果是,则继续并求值右侧。
[请阅读此处以深入了解。](https://en.wikipedia.org/wiki/Bitwise_operation "bitwise operations")
......
......@@ -98,7 +98,7 @@ Java 9 中的一些重要功能/ [更改是:](https://howtodoinjava.com/java9/
* 压缩的 64 位指针
* [开关](//howtodoinjava.com/java-7/string-class-is-supported-in-switch-statement-in-java-7/)中的字符串
* [尝试声明中的自动资源管理](//howtodoinjava.com/java-7/automatic-resource-management-with-try-with-resources-in-java-7/)
* [钻石操作员](//howtodoinjava.com/java-7/improved-type-inference-in-java-7/)
* [钻石运算符](//howtodoinjava.com/java-7/improved-type-inference-in-java-7/)
* 简化的 varargs 方法声明
* 二进制整数文字
* [数字文字下划线](//howtodoinjava.com/java-7/improved-formatted-numbers-in-java-7/)
......
......@@ -8,7 +8,7 @@
要将**属性文件转换为 XML 文件**,最好的方法是使用[`java.util.Properties`](https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html)类。 流程是:
1. 将属性文件加载到`java.util.`java.util.Properties`类`对象中。
1. 将属性文件加载到`java.util.java.util.Properties`对象中。
2. 使用[`Properties.storeToXML()`](https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html#storeToXML(java.io.OutputStream,java.lang.String))方法将内容写为 XML。
```java
......
# Java String to XML – 将字符串解析为 XML DOM 示例
# Java 字符串到 XML – 将字符串解析为 XML DOM 示例
> 原文: [https://howtodoinjava.com/xml/parse-string-to-xml-dom/](https://howtodoinjava.com/xml/parse-string-to-xml-dom/)
......@@ -9,12 +9,12 @@
## 1)将字符串转换为 XML 文档
要将**将 XML 字符串转换为 XML Dom** ,我们需要以下类:
要将**将 XML 字符串转换为 XML Dom**,我们需要以下类:
* [javax.xml.parsers.DocumentBuilder](https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/DocumentBuilder.html) :定义 API,以从来自各种输入源的 XML 内容中获取 XML DOM 文档实例。 这些输入源是 InputStreams,Files,URL 和 SAX InputSources
* [javax.xml.parsers.DocumentBuilderFactory](https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) :定义一种工厂 API,使应用能够获取解析器(`DocumentBuilder`),该解析器从 XML 内容生成 DOM 对象树。
* [org.w3c.dom.Document](https://docs.oracle.com/javase/10/docs/api/org/w3c/dom/Document.html) :它表示整个 XML DOM。 从概念上讲,它是文档树的根,并通过工厂方法提供对文档数据的访问,甚至深入到树中。
* [java.io.StringReader](https://docs.oracle.com/javase/10/docs/api/java/io/StringReader.html) :根据 String 内容创建流。 `DocumentBuilder`使用此流读取 XML 内容进行解析。
* [`javax.xml.parsers.DocumentBuilder`](https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/DocumentBuilder.html) :定义 API,以从来自各种输入源的 XML 内容中获取 XML DOM 文档实例。 这些输入源是`InputStreams`,文件,URL 和 SAX `InputSources`
* [`javax.xml.parsers.DocumentBuilderFactory`](https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) :定义一种工厂 API,使应用能够获取解析器(`DocumentBuilder`),该解析器从 XML 内容生成 DOM 对象树。
* [`org.w3c.dom.Document`](https://docs.oracle.com/javase/10/docs/api/org/w3c/dom/Document.html) :它表示整个 XML DOM。 从概念上讲,它是文档树的根,并通过工厂方法提供对文档数据的访问,甚至深入到树中。
* [`java.io.StringReader`](https://docs.oracle.com/javase/10/docs/api/java/io/StringReader.html) :根据字符串内容创建流。 `DocumentBuilder`使用此流读取 XML 内容进行解析。
```java
package com.howtodoinjava.demo;
......
......@@ -55,11 +55,11 @@ Table of Contents
XPath 使用的语言语法与我们已经知道的非常相似。 语法是基本编程语言表达式(例如`$x*6`的通配符)和**类 Unix 路径表达式**(例如`/inventory/author`)的混合。
除了基本语法外,XPath 还提供了一组有用的函数(例如`count()``contains(`,与实用程序函数调用非常相似),这些函数使您可以搜索文档中的各种数据片段。
除了基本语法外,XPath 还提供了一组有用的函数(例如`count()``contains()`,与实用程序函数调用非常相似),这些函数使您可以搜索文档中的各种数据片段。
## 2\. XPath 数据模型
XPath 将 XML 文档视为节点的[。 该树与](https://en.wikipedia.org/wiki/Tree_%28data_structure%29 "tree")[文档对象模型](https://www.w3.org/DOM/ "DOM")(即 DOM 树)非常相似,因此,如果您熟悉 DOM,则可以轻松了解如何构建基本的 **XPath 表达式**
XPath 将 XML 文档视为节点的[](https://en.wikipedia.org/wiki/Tree_%28data_structure%29 "tree")。 该树与[文档对象模型](https://www.w3.org/DOM/ "DOM")(即 DOM 树)非常相似,因此,如果您熟悉 DOM,则可以轻松了解如何构建基本的 **XPath 表达式**
XPath 数据模型中有七种节点:
......@@ -67,13 +67,13 @@ XPath 数据模型中有七种节点:
2. 元素节点
3. 属性节点
4. 文字节点
5. 评论节点
5. 注释节点
6. 处理指令节点
7. 命名空间节点
#### 2.1 根节点
[根节点](https://en.wikipedia.org/wiki/Root_element "root node")是包含整个文档的 XPath 节点。 在我们的示例中,根节点包含<广告资源>元素。 在 XPath 表达式中,用单斜杠(`'/'`)指定根节点。
[根节点](https://en.wikipedia.org/wiki/Root_element "root node")是包含整个文档的 XPath 节点。 在我们的示例中,根节点包含`<inventory>`元素。 在 XPath 表达式中,用单斜杠(`'/'`)指定根节点。
#### 2.2 元素节点
......@@ -102,9 +102,9 @@ XPath 数据模型中有七种节点:
例如,我们 XML 片段中的所有值都是文本节点,例如 “ `Snow Crash`”和“ `Neal Stephenson`”。
#### 2.5 评论节点
#### 2.5 注释节点
注释节点也非常简单 - 它包含一些文本。 **源文档中的每个注释都将成为注释节点**。 注释节点的文本包含注释中的所有内容,除了`<!-- and the closing -->`开头
注释节点也非常简单 - 它包含一些文本。 **源文档中的每个注释都将成为注释节点**。 注释节点的文本包含注释中的所有内容,除了`<!--`开头和`-->`结尾
例如:
......@@ -114,9 +114,9 @@ XPath 数据模型中有七种节点:
#### 2.6 处理指令节点
**处理指令节点具有两个部分****名称**(由 name()函数返回)和**字符串值**。 字符串值是名称`<?xml`之后的所有内容,包括空格,但不包括关闭处理指令的`?>`
**处理指令节点具有两个部分****名称**(由`name()`函数返回)和**字符串值**。 字符串值是名称`<?xml`之后的所有内容,包括空格,但不包括关闭处理指令的`?>`
For example:
例如:
```java
<?xml version="1.0" encoding="utf-8"?>
......@@ -126,7 +126,7 @@ For example:
XSLT 样式表几乎从未使用过命名空间节点。 **它们的存在主要是为了 XSLT 处理器的利益**
> 请记住,即使从技术上来说,名称空间的声明(例如 xmlns:auth =“ http://www.authors.net”)在 XML 源中仍是一个属性,但它成为名称空间节点,而不是属性节点。
> 请记住,即使从技术上来说,名称空间的声明(例如 `xmlns:auth="http://www.authors.net"`)在 XML 源中仍是一个属性,但它成为名称空间节点,而不是属性节点。
## 3\. XPath 数据类型
......@@ -134,8 +134,8 @@ XSLT 样式表几乎从未使用过命名空间节点。 **它们的存在主要
1. [**节点集**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#NODESET "NODESET") – 表示一组节点。 该集合可以为空,也可以包含任意数量的节点。
2. [**节点**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#NODE "NODE") (Java 支持)– 表示单个节点。 它可以为空,也可以包含任意数量的子节点。
3. [**布尔值**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#BOOLEAN "BOOLEAN") – 表示值 true 或 false。 请注意,在 XPath 中,true 或 false 字符串没有特殊含义或值。 有关布尔值的更详细讨论,请参见第 4 章的 4.2.1.2 节。
4. [**数字**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#NUMBER "NUMBER") – 表示浮点数。 XPath 和 XSLT 中的所有数字均实现为浮点数; XPath 和 XSLT 中不存在整数(或 int)数据类型。 具体来说,所有数字都实现为 IEEE 754 浮点数,与 Java float 和 double 原语类型使用的标准相同。 除普通数字外,数字还有五个特殊值:正负无穷大,正负零和 NaN(非数字的特殊符号)。
3. [**布尔值**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#BOOLEAN "BOOLEAN") – 表示值`true``false`。 请注意,在 XPath 中,`true``false`字符串没有特殊含义或值。 有关布尔值的更详细讨论,请参见第 4 章的 4.2.1.2 节。
4. [**数字**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#NUMBER "NUMBER") – 表示浮点数。 XPath 和 XSLT 中的所有数字均实现为浮点数; XPath 和 XSLT 中不存在整数(或`int`)数据类型。 具体来说,所有数字都实现为 IEEE 754 浮点数,与 Java `float``double`原始类型使用的标准相同。 除普通数字外,数字还有五个特殊值:正负无穷大,正负零和`NaN`(非数字的特殊符号)。
5. [**字符串**](https://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/XPathConstants.html#STRING "STRING") – 表示零个或多个字符,如 XML 规范中所定义。
这些数据类型通常很简单,并且除了节点集之外,类型之间的转换通常很简单。 我们将不在这里更详细地讨论这些数据类型。 相反,我们将讨论数据类型和转换,因为我们需要它们来执行特定的任务。
......@@ -146,8 +146,9 @@ XPath 使用 UNIX 和[正则表达式](https://en.wikipedia.org/wiki/Regular_exp
#### 4.1 选择具有 xpath 的节点
| 表达 | 描述 |
| `*nodename*` | 选择所有名称为“ *nodename* ”的节点 |
| 表达式 | 描述 |
| --- | --- |
| `nodename` | 选择所有名称为“`nodename`”的节点 |
| `/` | 从根节点选择 |
| `//` | 从当前节点中选择匹配选择的节点,无论它们在何处 |
| `.` | 选择当前节点 |
......@@ -163,7 +164,8 @@ XPath 使用 UNIX 和[正则表达式](https://en.wikipedia.org/wiki/Regular_exp
**XPath 通配符**可用于选择未知的 XML 元素。
| 通配符 | Description |
| 通配符 | 描述 |
| --- | --- |
| `*` | 匹配任何元素节点 |
| `@*` | 匹配任何属性节点 |
| `node()` | 匹配任何种类的任何节点 |
......@@ -173,8 +175,9 @@ XPath 使用 UNIX 和[正则表达式](https://en.wikipedia.org/wiki/Regular_exp
[](https://www.w3schools.com/xsl/xpath_axes.asp "xpath axis")定义相对于当前节点的节点集。 以下是默认定义的轴。
| 轴名 | 结果 |
| `ancestor` | 选择当前节点的所有祖先(父,祖父母等) |
| `ancestor-or-self` | 选择当前节点的所有祖先(父,祖父母等)和当前节点本身 |
| --- | --- |
| `ancestor` | 选择当前节点的所有祖先(父,祖父等) |
| `ancestor-or-self` | 选择当前节点的所有祖先(父,祖父等)和当前节点本身 |
| `attribute` | 选择当前节点的所有属性 |
| `child` | 选择当前节点的所有子节点 |
| `descendant` | 选择当前节点的所有后代(子代,孙代等) |
......@@ -182,40 +185,32 @@ XPath 使用 UNIX 和[正则表达式](https://en.wikipedia.org/wiki/Regular_exp
| `following` | 选择当前节点的结束标记之后的文档中的所有内容 |
| `following-sibling` | 选择当前节点之后的所有同级 |
| `namespace` | 选择当前节点的所有名称空间节点 |
| `parent` | Selects the parent of the current node |
| `parent` | 选择当前节点的父节点 |
| `preceding` | 选择出现在文档中当前节点之前的所有节点,但祖先,属性节点和名称空间节点除外 |
| `preceding-sibling` | 选择当前节点之前的所有同级 |
| `self` | Selects the current node |
| `self` | 选择当前节点 |
#### 4.5 XPath 运算
#### 4.5 XPath 运算
以下是可在 XPath 表达式中使用的 **xpath 运算符**的列表:
9.80<>9.90<>
| 操作员 | Description | 例 | 返回值 |
| `&#124;` | 计算两个节点集 | //书&#124; //光盘 | 返回包含所有 book 和 cd 元素的节点集 |
| `+` | 加成 | 6 + 4 | 10 |
| `-` | 减法 | 6 – 4 | 2 |
| `*` | 乘法 | 6 * 4 | 24 |
| `div` | 师 | 8 div 4 | 2 |
| `=` | 等于 | 价格= 9.80 | 如果价格为 9.80,则为 true
,如果价格为 9.90,则为 false |
| `!=` | 不相等 | 价格!= 9.80 | 如果价格为 9.90,则为 true
,如果价格为 9.80,则为 false |
| `<` | 少于 | 价格< 9.80 < td > | 如果价格为 9.00,则为 true
,如果价格为 9.80,则为 false |
| `< =` | 小于或等于 | 价格< = 9.80 | 如果价格为 9.00,则为 true
,如果价格为 9.90,则为 false |
| `>` | 比...更棒 | 价格> 9.80 | true if price is 9.90
false if price is 9.80 |
| `>=` | 大于或等于 | 价格> = 9.80 | 如果价格为 9.90,则为 true
,如果价格为 9.70,则为 false |
| `or` | 或者 | 价格= 9.80 或价格= 9.70 | 如果价格为 9.80,则为 true
,如果价格为 9.50,则为 false |
| `and` | 和 | 价格> 9.00 和价格< 9.90 < td > | 如果价格为 9.80,则为 true
,如果价格为 8.50,则为 false |
| `mod` | 模数(除法余数) | 5 与 2 | 1 |
| 运算符 | 描述 | 例 | 返回值 |
| --- | --- | --- | --- |
| <code>&#124;</code> | 计算两个节点集 | <code>//book &#124; //cd</code> | 返回包含所有`book``cd`元素的节点集 |
| `+` | 加法 | `6 + 4` | 10 |
| `-` | 减法 | `6 – 4` | 2 |
| `*` | 乘法 | `6 * 4` | 24 |
| `div` | 除法 | `8 div 4` | 2 |
| `=` | 等于 | `price = 9.80` | 如果价格为 9.80,则为`true`,如果价格为 9.90,则为`false` |
| `!=` | 不等于 | `price != 9.80` | 如果价格为 9.90,则为`true`,如果价格为 9.80,则为`false` |
| `<` | 小于 | `price < 9.80` | 如果价格为 9.00,则为`true`,如果价格为 9.80,则为`false` |
| `< =` | 小于或等于 | `price <= 9.80` | 如果价格为 9.00,则为`true`,如果价格为 9.90,则为`false` |
| `>` | 大于 | `prcie > 9.80` | 如果价格为 9.90,则为`true`,如果价格为 9.80,则为`false` |
| `>=` | 大于或等于 | `price >= 9.80` | 如果价格为 9.90,则为`true`,如果价格为 9.70,则为`false` |
| `or` | 或 | `price = 9.80 or price = 9.70` | 如果价格为 9.80,则为`true`,如果价格为 9.50,则为`false` |
| `and` | 且 | `price > 9.00 and price < 9.90` | 如果价格为 9.80,则为`true`,如果价格为 8.50,则为`false` |
| `mod` | 模数(除法余数) | `5 mod 2` | 1 |
## 5\. XPath 表达式
......@@ -434,7 +429,7 @@ Test is test comment
```
希望本 <string>xpath 教程</string>对您有所帮助。 它将帮助您使用 Java 执行 **xpath。 字符串****Java xpath 示例也将在 **Java 8** 中成功运行。**
希望本 xpath 教程对您有所帮助。 它将帮助您使用 Java 执行 **xpath**。 字符串的 **Java xpath 示例**也将在 **Java 8** 中成功运行。
如果您有任何建议,请发表评论。
......@@ -443,5 +438,7 @@ Test is test comment
推荐阅读:
[http://www.w3.org/TR/xpath-full-text-10-use-cases](https://www.w3.org/TR/xpath-full-text-10-use-cases/ "xpath use cases")
[http://en.wikipedia.org/wiki/XPath](https://en.wikipedia.org/wiki/XPath "wiki link")
[http://oreilly.com/catalog/xmlnut/chapter/ch09.html](https://oreilly.com/catalog/xmlnut/chapter/ch09.html)
\ No newline at end of file
# Java xpath 示例 – 在 xml 文件上评估 xpath
# Java xpath 示例 – 在 xml 文件上求值 xpath
> 原文: [https://howtodoinjava.com/xml/evaluate-xpath-on-dom/](https://howtodoinjava.com/xml/evaluate-xpath-on-dom/)
**Java xpath 示例**读取 XML 文件并解析为 DOM 对象,然后**评估`org.w3c.dom.Document`对象**上的 xpath 并以`String``NodeList`的形式获取结果。
**Java xpath 示例**读取 XML 文件并解析为 DOM 对象,然后**求值`org.w3c.dom.Document`对象**上的 xpath 并以`String``NodeList`的形式获取结果。
## 1\. Java 评估 xml 文件上的 xpath
## 1\. Java 求值 xml 文件上的 xpath
1. 创建`Document` DOM 对象`javax.xml.parsers.DocumentBuilder`对象。
2.[`XPathFactory`](https://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPathFactory.html)创建[`XPath`](https://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPath.html)
......@@ -97,5 +97,7 @@ Lokesh
阅读更多:
[字符串中的 Java xpath 示例](https://howtodoinjava.com/xml/evaluate-xpath-on-xml-string/)
[Java xpath 教程](https://howtodoinjava.com/xml/how-to-work-with-xpaths-in-java-with-examples/)
[如何在 Java 中使用 xpath 获取 xml 中的属性值](https://howtodoinjava.com/xml/xpath-attribute-evaluate/)
\ No newline at end of file
# Java 8 xpath 示例 – 在字符串上评估 xpath
# Java 8 xpath 示例 – 在字符串上求值 xpath
> 原文: [https://howtodoinjava.com/xml/evaluate-xpath-on-xml-string/](https://howtodoinjava.com/xml/evaluate-xpath-on-xml-string/)
Java 示例**评估字符串**上的 xpath 并返回字符串本身的结果 XML。
Java 示例**求值字符串**上的 xpath 并返回字符串本身的结果 XML。
## 1\. XPath 示例 – 在 xml 字符串上评估 xpath
## 1\. XPath 示例 – 在 xml 字符串上求值 xpath
1. 创建包含[`StringReader`](https://docs.oracle.com/javase/8/docs/api/java/io/StringReader.html)并引用 XML 字符串的[`org.xml.sax.InputSource`](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/InputSource.html)
2.[`XPathFactory`](https://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPathFactory.html)创建[`XPath`](https://docs.oracle.com/javase/8/docs/api/javax/xml/xpath/XPath.html)
......@@ -59,7 +59,7 @@ Lokesh
```
## 2\. XPath 示例 – 在 xml 文件上评估 xpath
## 2\. XPath 示例 – 在 xml 文件上求值 xpath
```java
package com.howtodoinjava.demo;
......@@ -141,7 +141,7 @@ Lokesh
```
在上面的 Xpath 教程中,我们学习了使用示例评估字符串上的 xpath 的方法。
在上面的 Xpath 教程中,我们学习了使用示例求值字符串上的 xpath 的方法。
学习愉快!
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/xml/java-xpath-expression-examples/](https://howtodoinjava.com/xml/java-xpath-expression-examples/)
[Java xpath](https://howtodoinjava.com/xml/how-to-work-with-xpaths-in-java-with-examples/) 表达式示例,通过评估这些表达式从 XML 文档中提取信息。 我们将学习获取有关匹配属性值,匹配字段值,`contains()`表达式等的信息。
[Java xpath](https://howtodoinjava.com/xml/how-to-work-with-xpaths-in-java-with-examples/) 表达式示例,通过求值这些表达式从 XML 文档中提取信息。 我们将学习获取有关匹配属性值,匹配字段值,`contains()`表达式等的信息。
## 1\. XPath 查询示例
......@@ -115,9 +115,9 @@
| 获取其 ID 包含“ 1”的员工 | `/employees/employee[contains(@id,'1')]/firstName/text()` | [Lokesh,加里] |
| 获取其 ID 包含 1 的员工 | `descendant-or-self::*[contains(@id,'1')]/firstName/text()` | [Lokesh, Gary] |
## 2.评估 xpath 表达式的 Java 示例
## 2.求值 xpath 表达式的 Java 示例
让我们看一下用于评估以上 xpath 表达式的代码。
让我们看一下用于求值以上 xpath 表达式的代码。
```java
package com.howtodoinjava.demo;
......@@ -224,7 +224,7 @@ public class XPathExample
```
> **XPath 表达式不是线程安全的**。 确保在任何给定时间不从多个线程使用一个`XPathExpression`对象是应用的责任,并且在调用评估方法时,应用可能不会递归调用评估方法。
> **XPath 表达式不是线程安全的**。 确保在任何给定时间不从多个线程使用一个`XPathExpression`对象是应用的责任,并且在调用求值方法时,应用可能不会递归调用求值方法。
## 3.模型类
......
......@@ -10,7 +10,7 @@
在给定的 Java 程序下面,从提供的 XML 字符串创建 DOM 对象。 然后,它使用 **XPath.selectNodes()**方法应用 XPATH 表达式。
方法返回`Element`实例的列表,这些实例是评估 XPath 表达式的结果。 您可以迭代列表并使用结果。
方法返回`Element`实例的列表,这些实例是求值 XPath 表达式的结果。 您可以迭代列表并使用结果。
```java
package com.howtodoinjava.xml;
......
......@@ -111,20 +111,20 @@
## 2\. Java 示例使用 xpath 查找具有属性值的 xml 元素
我们来看一下用于评估以上 xpath 表达式以选择具有特定属性值的节点的代码。
我们来看一下用于求值以上 xpath 表达式以选择具有特定属性值的节点的代码。
#### 2.1 XPath 评估示例
#### 2.1 XPath 求值示例
**在 Java**评估 xpath,您需要执行以下步骤:
**在 Java**求值 xpath,您需要执行以下步骤:
* 将 XML 文件读取到[`org.w3c.dom.Document`](https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html)中。
* 使用其`newInstance()`静态方法创建[`XPathFactory`](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathFactory.html)
*`XPathFactory`获取[`XPath`](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPath.html)实例。 该对象提供对 xpath 评估环境和表达式的访问。
*`XPathFactory`获取[`XPath`](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPath.html)实例。 该对象提供对 xpath 求值环境和表达式的访问。
* 创建 xpath 表达式字符串。 使用`xpath.compile()`方法将 xpath 字符串转换为[`XPathExpression`](https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPathExpression.html)对象。
* 针对第一步中创建的文档实例评估 xpath。 它将返回文档中的 DOM 节点列表。
* 针对第一步中创建的文档实例求值 xpath。 它将返回文档中的 DOM 节点列表。
* 使用`getNodeValue()`方法迭代节点并获得测试值。
> **XPath 表达式不是线程安全的**。 确保在任何给定时间不从多个线程使用一个`XPathExpression`对象是应用的责任,并且在调用评估方法时,应用可能不会递归调用评估方法。
> **XPath 表达式不是线程安全的**。 确保在任何给定时间不从多个线程使用一个`XPathExpression`对象是应用的责任,并且在调用求值方法时,应用可能不会递归调用求值方法。
```java
package com.howtodoinjava.demo;
......
......@@ -37,7 +37,7 @@
| Design Pattern Name | Purpose |
| [责任链](//howtodoinjava.com/design-patterns/behavioral/chain-of-responsibility-design-pattern/) | 责任链设计模式通过以链的形式将接收对象链接在一起,为多个对象提供了处理请求的机会。 |
| [命令](//howtodoinjava.com/design-patterns/behavioral/command-pattern/) | 命令设计模式对于将业务逻辑抽象为离散的动作(我们称为命令)很有用。 这些命令对象有助于两个类之间的松散耦合,其中一个类(调用者)应调用另一类(接收者)上的方法来执行业务操作。 |
| 口译员 | 解释器模式指定如何以编程方式评估一种语言的句子。 它有助于为一种简单的语言建立语法,以便可以解释该语言中的句子。 |
| 口译员 | 解释器模式指定如何以编程方式求值一种语言的句子。 它有助于为一种简单的语言建立语法,以便可以解释该语言中的句子。 |
| [迭代器](https://howtodoinjava.com/design-patterns/behavioral/iterator-design-pattern/) | 迭代器模式提供了一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。 |
| [介体](https://howtodoinjava.com/design-patterns/behavioral/mediator-pattern/) | 介体模式定义了一个对象,该对象封装了一组对象之间的交互方式。 介体通过防止对象之间显式地相互引用来促进松散耦合,并且它使我们可以独立地更改其交互。 |
| [纪念品](https://howtodoinjava.com/design-patterns/behavioral/memento-design-pattern/) | 记忆模式用于将对象的状态恢复到先前的状态。 也称为快照模式。 |
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册