@@ -14,12 +14,11 @@ Comencemos por conocer cómo abrir un documento |XML| y acceder a sus nodos:
1414
1515.. code-block :: java
1616
17- Path ruta = Path . of(System . getProperty(" user.home" ), " claustro.xml" );
1817 DocumentBuilderFactory factory = DocumentBuilderFactory . newInstance();
1918 // La siguiente línea puede provocar un ParseConfigurationException
2019 DocumentBuilder builder = factory. newDocumentBuilder();
2120
22- try (InputStream st = Files . newInputStream(ruta )) {
21+ try (InputStream st = getClass() . getResourceAsStream( " /claustro.xml " )) {
2322 // La línea posterior también puede generar una excepción.
2423 Document xml = builder. parse(st);
2524 // Accedemos a la información del documento a través de su DOM.
@@ -39,14 +38,11 @@ Comencemos por conocer cómo abrir un documento |XML| y acceder a sus nodos:
3938 <jaxp-dtd>`.
4039
4140Una vez tenemos disponible el objeto `Document ` ya podremos acceder a los nodos
42- del documento. En principio, los nodos se modelan mediante la clase `Node
43- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Node.html> `_ sobre la que
44- construyen subsclases que modelan los distintos tipos de nodos (`Element
45- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Element.html> `_, `Text
46- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Text.html> `_, `Attr
47- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Attr.html> `_, etc.). Cada
48- uno de estos tipos de nodos está asociado a un número entero al que se da
49- nombre mediante un atributo estático de `Node `_. Por ejemplo:
41+ del documento. En principio, los nodos se modelan mediante la clase |Node | sobre
42+ la que construyen subsclases que modelan los distintos tipos de nodos
43+ (|Element |, |Text |, |Attr |, etc.). Cada uno de estos tipos de nodos está
44+ asociado a un número entero al que se da nombre mediante un atributo estático de
45+ |Node |. Por ejemplo:
5046
5147.. code-block :: java
5248
@@ -73,7 +69,7 @@ hacer diversas pesquisas:
7369
7470``getNodeValue() ``
7571 devuelve el valor del nodo. Dependiendo del tipo de nodo, así será su valor
76- (al comienzo de la explicación sobre Node _ hay una tabla que indica qué valor
72+ (al comienzo de la explicación sobre | Node | hay una tabla que indica qué valor
7773 devuelve cada tipo).
7874
7975``getTextContent() ``
@@ -89,8 +85,8 @@ hacer diversas pesquisas:
8985
9086 .. code-block :: java
9187
92- // apelativo es una variable que contiene el elemento apelativo comentado
93- apelativo. getTextContent() == apelativo. firstChild(). getNodeValue();
88+ // apelativo es una variable que contiene el elemento apelativo antedicho
89+ apelativo. getTextContent(). equals( apelativo. firstChild(). getNodeValue() );
9490
9591 ``getFirstChild() `` o ``getLastChild() ``
9692 Devuelve el primero o el último **nodo ** hijo de aquel. Se ha remarcado nodo,
@@ -101,13 +97,11 @@ hacer diversas pesquisas:
10197 devuelve el nodo padre o el hermano previo o el hermano siguiente.
10298
10399``getChildNodes() ``
104- devuelve un objeto `NodeList
105- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/NodeList.html> `_ con
106- los nodos hijos. A pesar de su naturaleza no implementa la interfaz
107- :java-lang: `Iterable <Iterable> ` y sólo presenta un método (``getLength() ``)
108- que devuelve la cantidad de hijos y un método ``item(int index) `` que
109- devuelve el i-ésimo nodo de la lista. Por tanto, si se quiere quiere recorrer
110- la colección, habrá que usar un `for ` clásico:
100+ devuelve un objeto |NodeList | con los nodos hijos. A pesar de su naturaleza
101+ no implementa la interfaz :java-lang: `Iterable <Iterable> ` y sólo presenta un
102+ método (``getLength() ``) que devuelve la cantidad de hijos y un método
103+ ``item(int index) `` que devuelve el i-ésimo nodo de la lista. Por tanto, si
104+ se quiere quiere recorrer la colección, habrá que usar un `for ` clásico:
111105
112106 .. code-block :: java
113107
@@ -124,7 +118,7 @@ hacer diversas pesquisas:
124118 }
125119
126120 .. tip :: Pese a que, a priori, sólo podemos utilizar el `for` tradicional
127- para recorrer NodeList _ , podemos buscarnos las vueltas para convertirlo
121+ para recorrer | NodeList | , podemos buscarnos las vueltas para convertirlo
128122 en un flujo y poder usar con él técnicas de :ref: `Java funcional <funcional >`:
129123
130124 .. code-block :: Java
@@ -133,12 +127,11 @@ hacer diversas pesquisas:
133127 Stream<Node > streamNode = IntStream . range(0 , hijos. getLength()). mapToObj(hijos:: item);
134128
135129 ``getAttributes() ``
136- devuelve los atributos del elemento en forma de `NamedNodeMap
137- <https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/NamedNodeMap.html> `_
138- que como NodeList _ tampoco implemente la interfaz :java-lang: `Iterable
139- <Iterable> `. Además de ``item(int index) `` y ``getLength() ``, dispone también
140- de ``getNamedItem(String name) `` que permite obtener el nodo atributo a
141- partir de su nombre:
130+ devuelve los atributos del elemento en forma de |NamedNodeMap | que como
131+ |NodeList | tampoco implemente la interfaz :java-lang: `Iterable <Iterable> `.
132+ Además de ``item(int index) `` y ``getLength() ``, dispone también de
133+ ``getNamedItem(String name) `` que permite obtener el nodo atributo a partir
134+ de su nombre:
142135
143136 .. code-block :: java
144137
@@ -151,12 +144,12 @@ hacer diversas pesquisas:
151144 }
152145
153146 Por otra parte, los tipos de nodos tiene también sus métodos específicos. Por
154- ejemplo, Element _ :
147+ ejemplo, | Element | :
155148
156149``getElementsByTagName(String name) ``
157150 devuelve los elementos descendientes cuyo nombre de etiqueta es el
158151 suministrado en el argumento. El método también existe para los nodo
159- ` Document < https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Document.html >`_ :
152+ | Document | :
160153
161154 .. code-block :: java
162155
@@ -172,7 +165,7 @@ ejemplo, Element_:
172165 Element p17 = xml. getElementById(" p17" ); // null, porque no estamos usando el DTD
173166
174167 ``getAttributeNode(String name) `` o ``getAttribute(String name) ``
175- devuelve el atributo (Attr _ ) o el valor del atributo cuyo nombre se
168+ devuelve el atributo (| Attr | ) o el valor del atributo cuyo nombre se
176169 proporciona en el argumento.
177170
178171.. _jaxp-dtd :
@@ -303,7 +296,7 @@ crearlo *ex novo*:
303296
304297 Escritura a archivo
305298-------------------
306- Partamos de que ya tenemos un Document _ construido como queremos que quede
299+ Partamos de que ya tenemos un | Document | construido como queremos que quede
307300(véase el apartado anterior) y queremos ahora generar el |XML | correspondiente:
308301
309302.. code-block :: java
@@ -385,11 +378,19 @@ si nuestra intención es usarla una sola vez:
385378
386379.. [# ] En realidad el método tiene sentido para otros nodos que no sean
387380 elementos. Véase la tabla que resume sus significados en la explicación del
388- método que ofrece la documentación original de Node _ .
381+ método que ofrece la documentación original de | Node | .
389382
390383 .. |JAXP | replace :: :abbr: `JAXP ( Java API for XML Processing ) `
391384.. |XML | replace :: :abbr: `XML ( eXtensible Markup Language ) `
392385.. |DOM | replace :: :abbr: `DOM ( Document Object Model ) `
393386.. |DTD | replace :: :abbr: `DTD ( Document Type Definition ) `
394387.. |JDK | replace :: :abbr: `JDK ( Java Development Kit ) `
395388.. |URL | replace :: :abbr: `URL ( Uniform Resource Locator ) `
389+
390+ .. |Node | replace :: :java-jaxp: `Node `
391+ .. |Element | replace :: :java-jaxp: `Element `
392+ .. |Attr | replace :: :java-jaxp: `Attr `
393+ .. |Text | replace :: :java-jaxp: `Text `
394+ .. |NodeList | replace :: :java-jaxp: `NodeList `
395+ .. |NamedNodeMap | replace :: :java-jaxp: `NamedNodeMap `
396+ .. |Document | replace :: :java-jaxp: `Document `
0 commit comments