Skip to content

Commit 82e21e7

Browse files
committed
First commit
1 parent 83691af commit 82e21e7

File tree

10 files changed

+69
-28
lines changed

10 files changed

+69
-28
lines changed

src/test/java/com/trxs/pulse/ObjectStack.java renamed to src/main/java/com/trxs/commons/util/ObjectStack.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.util;
22

33
public class ObjectStack<E>
44
{
@@ -23,7 +23,7 @@ public int capacity()
2323
return elements == null ? 0 : elements.length;
2424
}
2525

26-
public boolean isEmpty()
26+
public boolean isNotEmpty()
2727
{
2828
return index >= 0 ;
2929
}
@@ -35,7 +35,7 @@ public E push( E e)
3535
elements[++index] = e;
3636
return e;
3737
}
38-
throw new RuntimeException("The stack is full!");
38+
throw new RuntimeException("The stack was overflow!");
3939
}
4040

4141
public E pop()

src/test/java/com/trxs/pulse/Analyser.java renamed to src/main/java/com/trxs/commons/xml/Analyser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
@@ -29,7 +29,7 @@ public class Analyser
2929
maxIndex = defaultCapacity - 1;
3030
}
3131

32-
Analyser(BufferedReader bufferedReader, int capacity)
32+
public Analyser(BufferedReader bufferedReader, int capacity)
3333
{
3434
index = 0;
3535
reader = bufferedReader;
@@ -144,7 +144,7 @@ public Element createElement(final Element parent)
144144
if ( c == '/' )
145145
{
146146
int lastChar = reader.read(); // 吃掉 '>'
147-
if ( lastChar == '>' ) return element;
147+
if ( lastChar == '>' ) return element.setNoBody(true);
148148
}
149149
else
150150
{

src/test/java/com/trxs/pulse/Attribute.java renamed to src/main/java/com/trxs/commons/xml/Attribute.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
public class Attribute
44
{

src/test/java/com/trxs/pulse/Element.java renamed to src/main/java/com/trxs/commons/xml/Element.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
import java.util.ArrayList;
44
import java.util.List;
@@ -8,12 +8,20 @@ public class Element extends Node
88
private String name;
99
private List<Attribute> attributes = new ArrayList<>();
1010
private List<Node> contents = new ArrayList<>();
11+
private boolean isNoBody = false;
1112

1213
public Element(char []chars, int length, Node parent)
1314
{
1415
super(NodeType.ELEMENT, parent);
15-
16-
name = chars[1] == '/' ? new String(chars,2, length-1) : new String(chars,1, length-1);
16+
if ( chars[0] == 'x' && chars[1] == 'm' && chars[2] == 'l')
17+
{
18+
name = new String(chars,0, length);
19+
}
20+
else
21+
{
22+
name = chars[0] == '/' ? new String(chars,1, length-1) : new String(chars,0, length);
23+
setHeader(chars[0] != '/');
24+
}
1725
}
1826

1927
public String getName()
@@ -40,4 +48,15 @@ public void addContent(Node content)
4048
{
4149
contents.add(content);
4250
}
51+
52+
public boolean isNoBody()
53+
{
54+
return isNoBody;
55+
}
56+
57+
public Element setNoBody(boolean noBody)
58+
{
59+
isNoBody = noBody;
60+
return this;
61+
}
4362
}

src/test/java/com/trxs/pulse/Node.java renamed to src/main/java/com/trxs/commons/xml/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
public class Node
44
{

src/test/java/com/trxs/pulse/NodeType.java renamed to src/main/java/com/trxs/commons/xml/NodeType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
public enum NodeType
44
{

src/test/java/com/trxs/pulse/TagAnalyser.java renamed to src/main/java/com/trxs/commons/xml/TagAnalyser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.trxs.pulse;
1+
package com.trxs.commons.xml;
22

33
import java.io.BufferedReader;
44
import java.io.ByteArrayInputStream;

src/test/java/com/trxs/pulse/XMLDemo1.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public static void main(String []args) throws Throwable
5353
*/
5454
//1
5555
//org.dom4j.xxxx
56+
5657
SAXReader reader = new SAXReader();
5758

5859
//2
@@ -73,7 +74,10 @@ public static void main(String []args) throws Throwable
7374
* Document对象中。
7475
* Document对象可以描述当前xml文档
7576
*/
77+
long t0 = System.nanoTime();
7678
Document doc = reader.read(inputStream);
79+
long t1 = System.nanoTime();
80+
7781

7882
//3
7983
Element root = doc.getRootElement();
@@ -111,6 +115,7 @@ public static void main(String []args) throws Throwable
111115

112116
elements.forEach( element -> scanElement(element) );
113117

118+
logger.debug("dt={}", (t1-t0)/1000);
114119
}
115120
catch(Exception e)
116121
{

src/test/java/com/trxs/pulse/XmlTests.java

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.trxs.pulse;
22

33
import com.trxs.commons.io.FileTools;
4+
import com.trxs.commons.util.ObjectStack;
5+
import com.trxs.commons.xml.*;
46
import org.junit.Test;
57
import org.slf4j.Logger;
68
import org.slf4j.LoggerFactory;
@@ -46,20 +48,14 @@ public void test() throws IOException {
4648
public void test1()
4749
{
4850
FileTools fileTools = FileTools.getInstance();
49-
50-
IntegerStack sStack = new IntegerStack(1024);
51-
ObjectStack<Element> eStack = new ObjectStack<>(1024);
51+
ObjectStack<Element> stack = new ObjectStack<>(128);
5252

5353
BufferedReader bufferedReader = getBufferedReaderBySource("/sql/pulse.xml");
5454

55-
sStack.push(Integer.valueOf(0));
56-
5755
Analyser analyser = new Analyser(bufferedReader, 1024);
5856

5957
Element version = analyser.getVersion(null);
6058

61-
ObjectStack<Element> stack = new ObjectStack<>(128);
62-
6359
long t0 = System.nanoTime();
6460
TagAnalyser tempTag;
6561
TagAnalyser tag = new TagAnalyser();
@@ -69,34 +65,54 @@ public void test1()
6965
do
7066
{
7167
tempTag = analyser.advance(tag);
72-
if ( tempTag == null ) break;
68+
if ( tempTag == null )
69+
{
70+
parent = stack.pop();
71+
continue;
72+
}
7373

7474
if ( tag.getType() == NodeType.ELEMENT )
7575
{
7676
element = tag.createElement(parent);
77+
if ( parent == null && element.isHeader() )
78+
{
79+
parent = element;
80+
stack.push(parent);
81+
continue;
82+
}
83+
else if ( parent == null )
84+
{
85+
throw new RuntimeException("Xml格式不对, 没有根节点!!!");
86+
}
87+
7788
if ( element.isHeader() )
7889
{
90+
parent.addContent(element);
7991
stack.push(element);
8092
parent = element;
8193
}
94+
else if ( element.isNoBody() ) // 没有内容节点 <include refid="sql_questionnaireTemplate_item"/>
95+
{
96+
parent.addContent(element);
97+
}
98+
else if ( stack.isNotEmpty() )
99+
{
100+
stack.pop(); parent = stack.peek();
101+
}
82102
else
83103
{
84-
Element e = stack.pop();
85-
86-
parent = e;
104+
throw new RuntimeException("Xml格式不对!!!");
87105
}
88106
}
89107
else
90108
{
91109
XmlText xmlText = new XmlText(tag.getContent(), parent);
92-
parent.addContent(xmlText);
110+
if ( parent != null ) parent.addContent(xmlText);
93111
}
94112
}while (tempTag != null);
95113
long t1 = System.nanoTime();
96114

97115
logger.debug("dt={}", (t1-t0)/1000);
98116
return;
99117
}
100-
101-
102118
}

src/test/java/com/trxs/pulse/XmlText.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.trxs.pulse;
22

3-
import org.junit.Test;
3+
import com.trxs.commons.xml.Node;
4+
import com.trxs.commons.xml.NodeType;
45

56
public class XmlText extends Node
67
{

0 commit comments

Comments
 (0)