XMLUtils.java
2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package ipipan.clarin.tei.impl.utils;
import ipipan.clarin.tei.api.exceptions.TEIException;
import java.util.Arrays;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
/**
*
* @author mlenart
*/
public class XMLUtils {
public final static String TEI_NS = "http://www.tei-c.org/ns/1.0";
public final static QName XML_ID_QNAME = new QName(
"http://www.w3.org/XML/1998/namespace", "id", "xml");
public final static String NKJP_NS = "http://www.nkjp.pl/ns/1.0";
public final static List<QName> possibleParagraphNames = Arrays.asList(
new QName(TEI_NS, "p"), new QName(TEI_NS, "div"), new QName(TEI_NS,
"ab"), new QName(TEI_NS, "u"));
public static String getXmlId(StartElement start) {
Attribute attr = start.getAttributeByName(XML_ID_QNAME);
return attr != null ? attr.getValue() : null;
}
public static String getAttrValue(StartElement start, String name) {
Attribute attr = start.getAttributeByName(new QName(name));
return attr != null ? attr.getValue() : null;
}
public static String getNKJPAttrValue(StartElement start, String name) {
Attribute attr = start.getAttributeByName(new QName(NKJP_NS, name));
return attr != null ? attr.getValue() : null;
}
public static StartElement advanceToStart(XMLEventReader xer, String name)
throws TEIException, XMLStreamException {
while (xer.hasNext() && !isStart(xer.peek(), name)) {
xer.nextEvent();
}
if (isStart(xer.peek(), name))
return xer.nextEvent().asStartElement();
else
throw new TEIException(
"Expected body start tag, but found end of stream");
}
public static boolean isStart(XMLEvent event, String name) {
return event.isStartElement()
&& event.asStartElement().getName()
.equals(new QName(TEI_NS, name));
}
public static void requireName(StartElement start, String name)
throws XMLStreamException {
require(String.format("start tag '%s'", name), start, start.getName()
.equals(new QName(TEI_NS, name)));
}
protected static void require(String reqMsg, XMLEvent event, boolean cond)
throws XMLStreamException {
if (!cond) {
fail(reqMsg, event);
}
}
protected static void fail(String reqMsg, XMLEvent eventGot)
throws XMLStreamException {
String msg = String.format("Expected %s here, but got %s", reqMsg,
eventGot.toString());
throw new XMLStreamException(msg, eventGot.getLocation());
}
public static boolean isEnd(XMLEvent event, String name) {
return event.isEndElement()
&& event.asEndElement().getName()
.equals(new QName(TEI_NS, name));
}
public static boolean getNKJPBooleanAttrValue(StartElement start,
String name) {
Attribute attr = start.getAttributeByName(new QName(NKJP_NS, name));
return attr == null ? false : attr.getValue().equalsIgnoreCase("true");
}
}