libxml-fixed-jruby 1.0.0-jruby

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +91 -0
  3. data/README.txt +50 -0
  4. data/Rakefile +40 -0
  5. data/lib/libxml-jruby.rb +84 -0
  6. data/lib/libxml-jruby/xml.rb +1 -0
  7. data/lib/libxml-jruby/xml/attr.rb +46 -0
  8. data/lib/libxml-jruby/xml/attributes.rb +68 -0
  9. data/lib/libxml-jruby/xml/document.rb +52 -0
  10. data/lib/libxml-jruby/xml/dtd.rb +25 -0
  11. data/lib/libxml-jruby/xml/node.rb +285 -0
  12. data/lib/libxml-jruby/xml/ns.rb +19 -0
  13. data/lib/libxml-jruby/xml/parser.rb +121 -0
  14. data/lib/libxml-jruby/xml/xpath.rb +98 -0
  15. data/lib/libxml.rb +1 -0
  16. data/lib/xml.rb +13 -0
  17. data/lib/xml/libxml.rb +8 -0
  18. data/script/benchmark/depixelate.rb +633 -0
  19. data/script/benchmark/hamlet.xml +9055 -0
  20. data/script/benchmark/sock_entries.xml +507 -0
  21. data/script/benchmark/throughput.rb +40 -0
  22. data/script/benchmark/xml_benchmarks.rb +228 -0
  23. data/script/test +6 -0
  24. data/tasks/ann.rake +81 -0
  25. data/tasks/bones.rake +21 -0
  26. data/tasks/gem.rake +126 -0
  27. data/tasks/git.rake +41 -0
  28. data/tasks/manifest.rake +49 -0
  29. data/tasks/notes.rake +28 -0
  30. data/tasks/post_load.rake +39 -0
  31. data/tasks/rdoc.rake +51 -0
  32. data/tasks/rubyforge.rake +57 -0
  33. data/tasks/setup.rb +268 -0
  34. data/tasks/spec.rake +55 -0
  35. data/tasks/svn.rake +48 -0
  36. data/tasks/test.rake +38 -0
  37. data/test/etc_doc_to_s.rb +19 -0
  38. data/test/ets_copy_bug.rb +21 -0
  39. data/test/ets_copy_bug3.rb +38 -0
  40. data/test/ets_doc_file.rb +15 -0
  41. data/test/ets_doc_to_s.rb +21 -0
  42. data/test/ets_gpx.rb +26 -0
  43. data/test/ets_node_gc.rb +21 -0
  44. data/test/ets_test.xml +2 -0
  45. data/test/ets_tsr.rb +9 -0
  46. data/test/model/books.xml +147 -0
  47. data/test/model/default_validation_bug.rb +0 -0
  48. data/test/model/merge_bug_data.xml +58 -0
  49. data/test/model/rubynet.xml +78 -0
  50. data/test/model/rubynet_project +1 -0
  51. data/test/model/saxtest.xml +5 -0
  52. data/test/model/shiporder.rnc +28 -0
  53. data/test/model/shiporder.rng +86 -0
  54. data/test/model/shiporder.xml +23 -0
  55. data/test/model/shiporder.xsd +31 -0
  56. data/test/model/simple.xml +7 -0
  57. data/test/model/soap.xml +27 -0
  58. data/test/model/xinclude.xml +5 -0
  59. data/test/tc_attributes.rb +110 -0
  60. data/test/tc_deprecated_require.rb +13 -0
  61. data/test/tc_document.rb +97 -0
  62. data/test/tc_document_write.rb +139 -0
  63. data/test/tc_dtd.rb +70 -0
  64. data/test/tc_html_parser.rb +63 -0
  65. data/test/tc_node.rb +108 -0
  66. data/test/tc_node_attr.rb +176 -0
  67. data/test/tc_node_cdata.rb +51 -0
  68. data/test/tc_node_comment.rb +32 -0
  69. data/test/tc_node_copy.rb +40 -0
  70. data/test/tc_node_edit.rb +98 -0
  71. data/test/tc_node_set.rb +24 -0
  72. data/test/tc_node_set2.rb +37 -0
  73. data/test/tc_node_text.rb +17 -0
  74. data/test/tc_node_xlink.rb +28 -0
  75. data/test/tc_ns.rb +18 -0
  76. data/test/tc_parser.rb +308 -0
  77. data/test/tc_parser_context.rb +126 -0
  78. data/test/tc_properties.rb +37 -0
  79. data/test/tc_reader.rb +112 -0
  80. data/test/tc_relaxng.rb +39 -0
  81. data/test/tc_sax_parser.rb +113 -0
  82. data/test/tc_schema.rb +39 -0
  83. data/test/tc_traversal.rb +220 -0
  84. data/test/tc_well_formed.rb +11 -0
  85. data/test/tc_xinclude.rb +26 -0
  86. data/test/tc_xpath.rb +130 -0
  87. data/test/tc_xpath_context.rb +72 -0
  88. data/test/tc_xpointer.rb +78 -0
  89. data/test/test_libxml-jruby.rb +0 -0
  90. data/test/test_suite.rb +31 -0
  91. data/test/ts_working.rb +31 -0
  92. metadata +146 -0
@@ -0,0 +1,98 @@
1
+ module LibXMLJRuby
2
+ module XML
3
+ module XPath
4
+ NODESET = nil
5
+
6
+ class Object
7
+ include Enumerable
8
+
9
+ def initialize(expr, document, nslist = nil)
10
+ @expr, @document = expr, document
11
+ @nslist = nslist
12
+ end
13
+
14
+ def each(&block)
15
+ set.each(&block)
16
+ end
17
+
18
+ def length
19
+ set.length
20
+ end
21
+
22
+ def first
23
+ set.first
24
+ end
25
+
26
+ def xpath_type
27
+ LibXMLJRuby::XML::XPath::NODESET
28
+ end
29
+
30
+ def set
31
+ @set ||= LibXMLJRuby::XML::Node::Set.from_java(evaluate_expression)
32
+ end
33
+
34
+ def [](index)
35
+ set[index]
36
+ end
37
+
38
+ private
39
+ def xpath_factory
40
+ @xpath_factory ||= XPathFactory.new_instance
41
+ end
42
+
43
+ def xpath
44
+ @xpath ||= xpath_factory.newXPath
45
+ end
46
+
47
+ def resolver
48
+ PrefixResolverDefault.new(doc_element)
49
+ end
50
+
51
+ def doc_element
52
+ if document.respond_to?(:getDocumentElement)
53
+ document.getDocumentElement
54
+ elsif document.respond_to?(:getOwnerDocument)
55
+ document.getOwnerDocument
56
+ else
57
+ nil
58
+ end
59
+ end
60
+
61
+ def namespace_context
62
+ CustomNamespaceContext.new(resolver)
63
+ end
64
+
65
+ def evaluate_expression
66
+ xpath.setNamespaceContext(namespace_context)
67
+ xpath.evaluate(@expr, document, XPathConstants::NODESET)
68
+ end
69
+
70
+ def document
71
+ @document.respond_to?(:java_obj) ? @document.java_obj : @document
72
+ end
73
+
74
+ class CustomNamespaceContext
75
+ include javax.xml.namespace.NamespaceContext
76
+
77
+ attr_reader :resolver
78
+
79
+ def initialize(resolver)
80
+ @resolver = resolver
81
+ end
82
+
83
+ def getNamespaceURI(prefix)
84
+ resolver.getNamespaceForPrefix(prefix)
85
+ end
86
+
87
+ def getPrefixes(val)
88
+ nil
89
+ end
90
+
91
+ def getPrefix(uri)
92
+ nil
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1 @@
1
+ require 'libxml-jruby'
@@ -0,0 +1,13 @@
1
+ # This file loads libxml and adds the LibXML namespace
2
+ # to the toplevel for conveneience. The end result
3
+ # is to have XML:: universally exposed.
4
+ #
5
+ # It is recommend that you only load this file for libs
6
+ # that do not have their own namespace, eg. administrative
7
+ # scripts, personal programs, etc. For other applications
8
+ # require 'libxml' instead and include LibXML into your
9
+ # app/libs namespace.
10
+
11
+ require 'libxml'
12
+
13
+ include LibXML
@@ -0,0 +1,8 @@
1
+ # This is here for backward compatibility.
2
+ #
3
+ # TODO: DEPRECATE!
4
+
5
+ require 'libxml.rb'
6
+
7
+ include LibXML
8
+
@@ -0,0 +1,633 @@
1
+ $:.unshift(Dir.pwd + "/lib")
2
+ require 'rubygems'
3
+ require 'benchmark'
4
+ require 'hpricot'
5
+ require 'rexml/document'
6
+ require 'xml'
7
+
8
+
9
+ # Taken from http://depixelate.com/2008/4/23/ruby-xml-parsing-benchmarks
10
+
11
+ XML_STRING = DATA.read
12
+
13
+ class Parse
14
+ def self.libxml
15
+ doc = XML::Parser.string(XML_STRING).parse
16
+ ary = []
17
+ doc.find('/*/*/*').each do |node|
18
+ case node.name
19
+ when 'ItemQueryRs'
20
+ node.each_element do |child|
21
+ ary << child.find_first('./ListID')
22
+ end
23
+ end
24
+ end
25
+ ary
26
+ end
27
+
28
+ def self.rexml
29
+ doc = REXML::Document.new(XML_STRING)
30
+ ary = []
31
+ REXML::XPath.each(doc, '/*/*/*') do |node|
32
+ case node.name
33
+ when 'ItemQueryRs'
34
+ node.elements.each do |element|
35
+ ary << rexml_fetch(element, 'ListID')
36
+ end
37
+ end
38
+ end
39
+ ary
40
+ end
41
+
42
+ def self.hpricot
43
+ doc = Hpricot.XML(XML_STRING)
44
+ ary = []
45
+ response_element = doc.search('/*/*/*').each do |node|
46
+ next unless node.elem?
47
+ case node.name
48
+ when 'ItemQueryRs'
49
+ node.containers.each do |element|
50
+ ary << hpricot_fetch(element/'ListID')
51
+ end
52
+ end
53
+ end
54
+ ary
55
+ end
56
+
57
+ # rexml helper
58
+ def self.rexml_fetch(node, name)
59
+ e = REXML::XPath.first(node, name)
60
+ e ? e.text : nil
61
+ end
62
+
63
+ # hpricot helper
64
+ def self.hpricot_fetch(path)
65
+ return nil if path.nil? || path.empty?
66
+ path = path.first if path.is_a?(Array)
67
+ path.innerHTML
68
+ end
69
+ end
70
+
71
+ TIMES = 100
72
+ Benchmark.bmbm do |x|
73
+ x.report('libxml') { TIMES.times { Parse.libxml } }
74
+ x.report('Hpricot') { TIMES.times { Parse.hpricot } }
75
+ x.report('REXML') { TIMES.times { Parse.rexml } }
76
+ end
77
+
78
+ __END__
79
+ <?xml version="1.0"?>
80
+ <QBXML>
81
+ <QBXMLMsgsRs>
82
+ <ItemQueryRs requestID="1" statusCode="0" statusSeverity="Info" statusMessage="Status OK">
83
+ <ItemServiceRet>
84
+ <ListID>240000-1071531214</ListID>
85
+ <TimeCreated>2003-12-15T15:33:34-08:00</TimeCreated>
86
+ <TimeModified>2003-12-15T15:34:51-08:00</TimeModified>
87
+ <EditSequence>1071531291</EditSequence>
88
+ <Name>Delivery</Name>
89
+ <FullName>Delivery</FullName>
90
+ <IsActive>true</IsActive>
91
+ <Sublevel>0</Sublevel>
92
+ <SalesTaxCodeRef>
93
+ <ListID>20000-999021789</ListID>
94
+ <FullName>Non</FullName>
95
+ </SalesTaxCodeRef>
96
+ <SalesOrPurchase>
97
+ <Desc>Delivery Service Fee (free for orders over $100)</Desc>
98
+ <Price>15.00</Price>
99
+ <AccountRef>
100
+ <ListID>610001-1071531179</ListID>
101
+ <FullName>Service</FullName>
102
+ </AccountRef>
103
+ </SalesOrPurchase>
104
+ </ItemServiceRet>
105
+ <ItemServiceRet>
106
+ <ListID>10000-934380927</ListID>
107
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
108
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
109
+ <EditSequence>934380927</EditSequence>
110
+ <Name>Design</Name>
111
+ <FullName>Design</FullName>
112
+ <IsActive>true</IsActive>
113
+ <Sublevel>0</Sublevel>
114
+ <SalesTaxCodeRef>
115
+ <ListID>20000-999021789</ListID>
116
+ <FullName>Non</FullName>
117
+ </SalesTaxCodeRef>
118
+ <SalesOrPurchase>
119
+ <Desc>Custom Landscape Design</Desc>
120
+ <Price>55.00</Price>
121
+ <AccountRef>
122
+ <ListID>150000-934380913</ListID>
123
+ <FullName>Landscaping Services:Design Services</FullName>
124
+ </AccountRef>
125
+ </SalesOrPurchase>
126
+ </ItemServiceRet>
127
+ <ItemServiceRet>
128
+ <ListID>20000-934380927</ListID>
129
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
130
+ <TimeModified>1999-08-11T08:59:12-08:00</TimeModified>
131
+ <EditSequence>934387152</EditSequence>
132
+ <Name>Gardening</Name>
133
+ <FullName>Gardening</FullName>
134
+ <IsActive>true</IsActive>
135
+ <Sublevel>0</Sublevel>
136
+ <SalesTaxCodeRef>
137
+ <ListID>20000-999021789</ListID>
138
+ <FullName>Non</FullName>
139
+ </SalesTaxCodeRef>
140
+ <SalesOrPurchase>
141
+ <Desc>Weekly gardening services</Desc>
142
+ <Price>0.00</Price>
143
+ <AccountRef>
144
+ <ListID>1F0000-934380913</ListID>
145
+ <FullName>Landscaping Services:Labor:Installation</FullName>
146
+ </AccountRef>
147
+ </SalesOrPurchase>
148
+ </ItemServiceRet>
149
+ <ItemServiceRet>
150
+ <ListID>30000-934380927</ListID>
151
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
152
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
153
+ <EditSequence>934380927</EditSequence>
154
+ <Name>Installation</Name>
155
+ <FullName>Installation</FullName>
156
+ <IsActive>true</IsActive>
157
+ <Sublevel>0</Sublevel>
158
+ <SalesTaxCodeRef>
159
+ <ListID>20000-999021789</ListID>
160
+ <FullName>Non</FullName>
161
+ </SalesTaxCodeRef>
162
+ <SalesOrPurchase>
163
+ <Desc>Installation of landscape design</Desc>
164
+ <Price>35.00</Price>
165
+ <AccountRef>
166
+ <ListID>1F0000-934380913</ListID>
167
+ <FullName>Landscaping Services:Labor:Installation</FullName>
168
+ </AccountRef>
169
+ </SalesOrPurchase>
170
+ </ItemServiceRet>
171
+ <ItemServiceRet>
172
+ <ListID>40000-934380927</ListID>
173
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
174
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
175
+ <EditSequence>934380927</EditSequence>
176
+ <Name>Pest Control</Name>
177
+ <FullName>Pest Control</FullName>
178
+ <IsActive>true</IsActive>
179
+ <Sublevel>0</Sublevel>
180
+ <SalesTaxCodeRef>
181
+ <ListID>20000-999021789</ListID>
182
+ <FullName>Non</FullName>
183
+ </SalesTaxCodeRef>
184
+ <SalesOrPurchase>
185
+ <Desc>Pest control services</Desc>
186
+ <Price>0.00</Price>
187
+ <AccountRef>
188
+ <ListID>200000-934380913</ListID>
189
+ <FullName>Landscaping Services:Labor:Maintenance &amp; Repairs</FullName>
190
+ </AccountRef>
191
+ </SalesOrPurchase>
192
+ </ItemServiceRet>
193
+ <ItemServiceRet>
194
+ <ListID>2E0000-1071514896</ListID>
195
+ <TimeCreated>2003-12-15T11:01:36-08:00</TimeCreated>
196
+ <TimeModified>2003-12-15T14:42:51-08:00</TimeModified>
197
+ <EditSequence>1071528171</EditSequence>
198
+ <Name>Tree Removal</Name>
199
+ <FullName>Tree Removal</FullName>
200
+ <IsActive>true</IsActive>
201
+ <Sublevel>0</Sublevel>
202
+ <SalesTaxCodeRef>
203
+ <ListID>20000-999021789</ListID>
204
+ <FullName>Non</FullName>
205
+ </SalesTaxCodeRef>
206
+ <SalesOrPurchase>
207
+ <Desc>Tree Removal Service</Desc>
208
+ <Price>0.00</Price>
209
+ <AccountRef>
210
+ <ListID>610001-1071531179</ListID>
211
+ <FullName>Service</FullName>
212
+ </AccountRef>
213
+ </SalesOrPurchase>
214
+ </ItemServiceRet>
215
+ <ItemServiceRet>
216
+ <ListID>50000-934380927</ListID>
217
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
218
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
219
+ <EditSequence>934380927</EditSequence>
220
+ <Name>Trimming</Name>
221
+ <FullName>Trimming</FullName>
222
+ <IsActive>true</IsActive>
223
+ <Sublevel>0</Sublevel>
224
+ <SalesTaxCodeRef>
225
+ <ListID>20000-999021789</ListID>
226
+ <FullName>Non</FullName>
227
+ </SalesTaxCodeRef>
228
+ <SalesOrPurchase>
229
+ <Desc>Tree and shrub trimming</Desc>
230
+ <Price>35.00</Price>
231
+ <AccountRef>
232
+ <ListID>200000-934380913</ListID>
233
+ <FullName>Landscaping Services:Labor:Maintenance &amp; Repairs</FullName>
234
+ </AccountRef>
235
+ </SalesOrPurchase>
236
+ </ItemServiceRet>
237
+ <ItemNonInventoryRet>
238
+ <ListID>B0000-934380927</ListID>
239
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
240
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
241
+ <EditSequence>934380927</EditSequence>
242
+ <Name>Concrete</Name>
243
+ <FullName>Concrete</FullName>
244
+ <IsActive>true</IsActive>
245
+ <Sublevel>0</Sublevel>
246
+ <SalesTaxCodeRef>
247
+ <ListID>10000-999021789</ListID>
248
+ <FullName>Tax</FullName>
249
+ </SalesTaxCodeRef>
250
+ <SalesOrPurchase>
251
+ <Desc>Concrete for fountain installation</Desc>
252
+ <Price>0.00</Price>
253
+ <AccountRef>
254
+ <ListID>1B0000-934380913</ListID>
255
+ <FullName>Landscaping Services:Job Materials:Fountains &amp; Garden Lighting</FullName>
256
+ </AccountRef>
257
+ </SalesOrPurchase>
258
+ </ItemNonInventoryRet>
259
+ <ItemNonInventoryRet>
260
+ <ListID>C0000-934380927</ListID>
261
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
262
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
263
+ <EditSequence>934380927</EditSequence>
264
+ <Name>Deck Lumber</Name>
265
+ <FullName>Deck Lumber</FullName>
266
+ <IsActive>true</IsActive>
267
+ <Sublevel>0</Sublevel>
268
+ <SalesTaxCodeRef>
269
+ <ListID>10000-999021789</ListID>
270
+ <FullName>Tax</FullName>
271
+ </SalesTaxCodeRef>
272
+ <SalesOrPurchase>
273
+ <Desc>Deck Lumber</Desc>
274
+ <Price>0.00</Price>
275
+ <AccountRef>
276
+ <ListID>1A0000-934380913</ListID>
277
+ <FullName>Landscaping Services:Job Materials:Decks &amp; Patios</FullName>
278
+ </AccountRef>
279
+ </SalesOrPurchase>
280
+ </ItemNonInventoryRet>
281
+ <ItemNonInventoryRet>
282
+ <ListID>210000-1071530240</ListID>
283
+ <TimeCreated>2003-12-15T15:17:20-08:00</TimeCreated>
284
+ <TimeModified>2003-12-15T15:17:20-08:00</TimeModified>
285
+ <EditSequence>1071530240</EditSequence>
286
+ <Name>Fertilizer</Name>
287
+ <FullName>Fertilizer</FullName>
288
+ <IsActive>true</IsActive>
289
+ <Sublevel>0</Sublevel>
290
+ <SalesTaxCodeRef>
291
+ <ListID>10000-999021789</ListID>
292
+ <FullName>Tax</FullName>
293
+ </SalesTaxCodeRef>
294
+ <SalesOrPurchase>
295
+ <Desc>Parent Item - Do Not Use</Desc>
296
+ <Price>0.00</Price>
297
+ <AccountRef>
298
+ <ListID>600001-1071530232</ListID>
299
+ <FullName>Retail Sales</FullName>
300
+ </AccountRef>
301
+ </SalesOrPurchase>
302
+ </ItemNonInventoryRet>
303
+ <ItemInventoryRet>
304
+ <ListID>250000-1071523682</ListID>
305
+ <TimeCreated>2003-12-15T13:28:02-08:00</TimeCreated>
306
+ <TimeModified>2003-12-15T13:44:20-08:00</TimeModified>
307
+ <EditSequence>1071524660</EditSequence>
308
+ <Name>Irrigation Hose</Name>
309
+ <FullName>Irrigation Hose</FullName>
310
+ <IsActive>true</IsActive>
311
+ <Sublevel>0</Sublevel>
312
+ <SalesTaxCodeRef>
313
+ <ListID>10000-999021789</ListID>
314
+ <FullName>Tax</FullName>
315
+ </SalesTaxCodeRef>
316
+ <SalesDesc>Parent Item Vinyl Irrigation Line- Do Not Purchase or Sell</SalesDesc>
317
+ <SalesPrice>0.00</SalesPrice>
318
+ <IncomeAccountRef>
319
+ <ListID>690001-1071523679</ListID>
320
+ <FullName>Landscaping Services:Job Materials:Misc Materials</FullName>
321
+ </IncomeAccountRef>
322
+ <PurchaseDesc>Vinyl Irrigation LineParent Item - Do Not Purchase or Sell</PurchaseDesc>
323
+ <PurchaseCost>0.00</PurchaseCost>
324
+ <COGSAccountRef>
325
+ <ListID>240000-934380913</ListID>
326
+ <FullName>Cost of Goods Sold</FullName>
327
+ </COGSAccountRef>
328
+ <AssetAccountRef>
329
+ <ListID>60000-934380912</ListID>
330
+ <FullName>Inventory Asset</FullName>
331
+ </AssetAccountRef>
332
+ <ReorderPoint>-1</ReorderPoint>
333
+ <QuantityOnHand>0</QuantityOnHand>
334
+ <AverageCost>0.00</AverageCost>
335
+ <QuantityOnOrder>0</QuantityOnOrder>
336
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
337
+ </ItemInventoryRet>
338
+ <ItemInventoryRet>
339
+ <ListID>270000-1071524193</ListID>
340
+ <TimeCreated>2003-12-15T13:36:33-08:00</TimeCreated>
341
+ <TimeModified>2003-12-15T13:38:13-08:00</TimeModified>
342
+ <EditSequence>1071524293</EditSequence>
343
+ <Name>1/2" Line</Name>
344
+ <FullName>Irrigation Hose:1/2" Line</FullName>
345
+ <IsActive>true</IsActive>
346
+ <ParentRef>
347
+ <ListID>250000-1071523682</ListID>
348
+ <FullName>Irrigation Hose</FullName>
349
+ </ParentRef>
350
+ <Sublevel>1</Sublevel>
351
+ <SalesTaxCodeRef>
352
+ <ListID>10000-999021789</ListID>
353
+ <FullName>Tax</FullName>
354
+ </SalesTaxCodeRef>
355
+ <SalesDesc>1/2" Vinyl Irrigation Line</SalesDesc>
356
+ <SalesPrice>0.15</SalesPrice>
357
+ <IncomeAccountRef>
358
+ <ListID>690001-1071523679</ListID>
359
+ <FullName>Landscaping Services:Job Materials:Misc Materials</FullName>
360
+ </IncomeAccountRef>
361
+ <PurchaseDesc>1/2" Vinyl Irrigation Line</PurchaseDesc>
362
+ <PurchaseCost>0.12</PurchaseCost>
363
+ <COGSAccountRef>
364
+ <ListID>240000-934380913</ListID>
365
+ <FullName>Cost of Goods Sold</FullName>
366
+ </COGSAccountRef>
367
+ <AssetAccountRef>
368
+ <ListID>60000-934380912</ListID>
369
+ <FullName>Inventory Asset</FullName>
370
+ </AssetAccountRef>
371
+ <ReorderPoint>1500</ReorderPoint>
372
+ <QuantityOnHand>1783</QuantityOnHand>
373
+ <AverageCost>0.12</AverageCost>
374
+ <QuantityOnOrder>0</QuantityOnOrder>
375
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
376
+ </ItemInventoryRet>
377
+ <ItemInventoryRet>
378
+ <ListID>260000-1071523858</ListID>
379
+ <TimeCreated>2003-12-15T13:30:58-08:00</TimeCreated>
380
+ <TimeModified>2003-12-15T13:37:52-08:00</TimeModified>
381
+ <EditSequence>1071524272</EditSequence>
382
+ <Name>1/4" Line</Name>
383
+ <FullName>Irrigation Hose:1/4" Line</FullName>
384
+ <IsActive>true</IsActive>
385
+ <ParentRef>
386
+ <ListID>250000-1071523682</ListID>
387
+ <FullName>Irrigation Hose</FullName>
388
+ </ParentRef>
389
+ <Sublevel>1</Sublevel>
390
+ <SalesTaxCodeRef>
391
+ <ListID>10000-999021789</ListID>
392
+ <FullName>Tax</FullName>
393
+ </SalesTaxCodeRef>
394
+ <SalesDesc>1/4" Vinyl Irrigation Line</SalesDesc>
395
+ <SalesPrice>0.10</SalesPrice>
396
+ <IncomeAccountRef>
397
+ <ListID>690001-1071523679</ListID>
398
+ <FullName>Landscaping Services:Job Materials:Misc Materials</FullName>
399
+ </IncomeAccountRef>
400
+ <PurchaseDesc>1/4" Vinyl Irrigation Line</PurchaseDesc>
401
+ <PurchaseCost>0.07</PurchaseCost>
402
+ <COGSAccountRef>
403
+ <ListID>240000-934380913</ListID>
404
+ <FullName>Cost of Goods Sold</FullName>
405
+ </COGSAccountRef>
406
+ <AssetAccountRef>
407
+ <ListID>60000-934380912</ListID>
408
+ <FullName>Inventory Asset</FullName>
409
+ </AssetAccountRef>
410
+ <ReorderPoint>500</ReorderPoint>
411
+ <QuantityOnHand>1235</QuantityOnHand>
412
+ <AverageCost>0.07</AverageCost>
413
+ <QuantityOnOrder>0</QuantityOnOrder>
414
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
415
+ </ItemInventoryRet>
416
+ <ItemInventoryRet>
417
+ <ListID>280000-1071524260</ListID>
418
+ <TimeCreated>2003-12-15T13:37:40-08:00</TimeCreated>
419
+ <TimeModified>2003-12-15T13:37:40-08:00</TimeModified>
420
+ <EditSequence>1071524260</EditSequence>
421
+ <Name>3/4" Line</Name>
422
+ <FullName>Irrigation Hose:3/4" Line</FullName>
423
+ <IsActive>true</IsActive>
424
+ <ParentRef>
425
+ <ListID>250000-1071523682</ListID>
426
+ <FullName>Irrigation Hose</FullName>
427
+ </ParentRef>
428
+ <Sublevel>1</Sublevel>
429
+ <SalesTaxCodeRef>
430
+ <ListID>10000-999021789</ListID>
431
+ <FullName>Tax</FullName>
432
+ </SalesTaxCodeRef>
433
+ <SalesDesc>3/4" Vinyl Irrigation Line</SalesDesc>
434
+ <SalesPrice>0.27</SalesPrice>
435
+ <IncomeAccountRef>
436
+ <ListID>690001-1071523679</ListID>
437
+ <FullName>Landscaping Services:Job Materials:Misc Materials</FullName>
438
+ </IncomeAccountRef>
439
+ <PurchaseDesc>3/4" Vinyl Irrigation Line</PurchaseDesc>
440
+ <PurchaseCost>0.18</PurchaseCost>
441
+ <COGSAccountRef>
442
+ <ListID>240000-934380913</ListID>
443
+ <FullName>Cost of Goods Sold</FullName>
444
+ </COGSAccountRef>
445
+ <AssetAccountRef>
446
+ <ListID>60000-934380912</ListID>
447
+ <FullName>Inventory Asset</FullName>
448
+ </AssetAccountRef>
449
+ <ReorderPoint>1500</ReorderPoint>
450
+ <QuantityOnHand>2670</QuantityOnHand>
451
+ <AverageCost>0.18</AverageCost>
452
+ <QuantityOnOrder>0</QuantityOnOrder>
453
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
454
+ </ItemInventoryRet>
455
+ <ItemInventoryRet>
456
+ <ListID>60000-934380927</ListID>
457
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
458
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
459
+ <EditSequence>934380927</EditSequence>
460
+ <Name>Lighting</Name>
461
+ <FullName>Lighting</FullName>
462
+ <IsActive>true</IsActive>
463
+ <Sublevel>0</Sublevel>
464
+ <SalesTaxCodeRef>
465
+ <ListID>10000-999021789</ListID>
466
+ <FullName>Tax</FullName>
467
+ </SalesTaxCodeRef>
468
+ <SalesDesc>Garden Lighting</SalesDesc>
469
+ <SalesPrice>0.00</SalesPrice>
470
+ <IncomeAccountRef>
471
+ <ListID>1B0000-934380913</ListID>
472
+ <FullName>Landscaping Services:Job Materials:Fountains &amp; Garden Lighting</FullName>
473
+ </IncomeAccountRef>
474
+ <PurchaseDesc>Garden Lighting</PurchaseDesc>
475
+ <PurchaseCost>0.00</PurchaseCost>
476
+ <COGSAccountRef>
477
+ <ListID>240000-934380913</ListID>
478
+ <FullName>Cost of Goods Sold</FullName>
479
+ </COGSAccountRef>
480
+ <AssetAccountRef>
481
+ <ListID>60000-934380912</ListID>
482
+ <FullName>Inventory Asset</FullName>
483
+ </AssetAccountRef>
484
+ <QuantityOnHand>94</QuantityOnHand>
485
+ <AverageCost>14.80</AverageCost>
486
+ <QuantityOnOrder>28</QuantityOnOrder>
487
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
488
+ </ItemInventoryRet>
489
+ <ItemInventoryRet>
490
+ <ListID>70000-934380927</ListID>
491
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
492
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
493
+ <EditSequence>934380927</EditSequence>
494
+ <Name>Pump</Name>
495
+ <FullName>Pump</FullName>
496
+ <IsActive>true</IsActive>
497
+ <Sublevel>0</Sublevel>
498
+ <SalesTaxCodeRef>
499
+ <ListID>10000-999021789</ListID>
500
+ <FullName>Tax</FullName>
501
+ </SalesTaxCodeRef>
502
+ <SalesDesc>Fountain pump</SalesDesc>
503
+ <SalesPrice>75.00</SalesPrice>
504
+ <IncomeAccountRef>
505
+ <ListID>1B0000-934380913</ListID>
506
+ <FullName>Landscaping Services:Job Materials:Fountains &amp; Garden Lighting</FullName>
507
+ </IncomeAccountRef>
508
+ <PurchaseDesc>Fountain pump #198-30</PurchaseDesc>
509
+ <PurchaseCost>56.00</PurchaseCost>
510
+ <COGSAccountRef>
511
+ <ListID>240000-934380913</ListID>
512
+ <FullName>Cost of Goods Sold</FullName>
513
+ </COGSAccountRef>
514
+ <AssetAccountRef>
515
+ <ListID>60000-934380912</ListID>
516
+ <FullName>Inventory Asset</FullName>
517
+ </AssetAccountRef>
518
+ <QuantityOnHand>48</QuantityOnHand>
519
+ <AverageCost>53.93</AverageCost>
520
+ <QuantityOnOrder>0</QuantityOnOrder>
521
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
522
+ </ItemInventoryRet>
523
+ <ItemInventoryRet>
524
+ <ListID>80000-934380927</ListID>
525
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
526
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
527
+ <EditSequence>934380927</EditSequence>
528
+ <Name>Soil</Name>
529
+ <FullName>Soil</FullName>
530
+ <IsActive>true</IsActive>
531
+ <Sublevel>0</Sublevel>
532
+ <SalesTaxCodeRef>
533
+ <ListID>10000-999021789</ListID>
534
+ <FullName>Tax</FullName>
535
+ </SalesTaxCodeRef>
536
+ <SalesDesc>Soil, 2 cubic ft bag</SalesDesc>
537
+ <SalesPrice>6.75</SalesPrice>
538
+ <IncomeAccountRef>
539
+ <ListID>1C0000-934380913</ListID>
540
+ <FullName>Landscaping Services:Job Materials:Plants and Sod</FullName>
541
+ </IncomeAccountRef>
542
+ <PurchaseDesc>Soil, 2 cubic ft bag</PurchaseDesc>
543
+ <PurchaseCost>5.30</PurchaseCost>
544
+ <COGSAccountRef>
545
+ <ListID>240000-934380913</ListID>
546
+ <FullName>Cost of Goods Sold</FullName>
547
+ </COGSAccountRef>
548
+ <PrefVendorRef>
549
+ <ListID>10000-934380927</ListID>
550
+ <FullName>Middlefield Nursery</FullName>
551
+ </PrefVendorRef>
552
+ <AssetAccountRef>
553
+ <ListID>60000-934380912</ListID>
554
+ <FullName>Inventory Asset</FullName>
555
+ </AssetAccountRef>
556
+ <ReorderPoint>25</ReorderPoint>
557
+ <QuantityOnHand>0</QuantityOnHand>
558
+ <AverageCost>5.30</AverageCost>
559
+ <QuantityOnOrder>6</QuantityOnOrder>
560
+ <QuantityOnSalesOrder>10</QuantityOnSalesOrder>
561
+ </ItemInventoryRet>
562
+ <ItemInventoryRet>
563
+ <ListID>90000-934380927</ListID>
564
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
565
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
566
+ <EditSequence>934380927</EditSequence>
567
+ <Name>Sprinkler Hds</Name>
568
+ <FullName>Sprinkler Hds</FullName>
569
+ <IsActive>true</IsActive>
570
+ <Sublevel>0</Sublevel>
571
+ <SalesTaxCodeRef>
572
+ <ListID>10000-999021789</ListID>
573
+ <FullName>Tax</FullName>
574
+ </SalesTaxCodeRef>
575
+ <SalesDesc>Sprinkler heads</SalesDesc>
576
+ <SalesPrice>0.00</SalesPrice>
577
+ <IncomeAccountRef>
578
+ <ListID>1D0000-934380913</ListID>
579
+ <FullName>Landscaping Services:Job Materials:Sprinklers &amp; Drip systems</FullName>
580
+ </IncomeAccountRef>
581
+ <PurchaseDesc>Sprinkler head #BLS9081-09</PurchaseDesc>
582
+ <PurchaseCost>0.00</PurchaseCost>
583
+ <COGSAccountRef>
584
+ <ListID>240000-934380913</ListID>
585
+ <FullName>Cost of Goods Sold</FullName>
586
+ </COGSAccountRef>
587
+ <AssetAccountRef>
588
+ <ListID>60000-934380912</ListID>
589
+ <FullName>Inventory Asset</FullName>
590
+ </AssetAccountRef>
591
+ <QuantityOnHand>69</QuantityOnHand>
592
+ <AverageCost>6.38</AverageCost>
593
+ <QuantityOnOrder>36</QuantityOnOrder>
594
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
595
+ </ItemInventoryRet>
596
+ <ItemInventoryRet>
597
+ <ListID>A0000-934380927</ListID>
598
+ <TimeCreated>1999-08-11T07:15:27-08:00</TimeCreated>
599
+ <TimeModified>1999-08-11T07:15:27-08:00</TimeModified>
600
+ <EditSequence>934380927</EditSequence>
601
+ <Name>Sprkl pipes</Name>
602
+ <FullName>Sprkl pipes</FullName>
603
+ <IsActive>true</IsActive>
604
+ <Sublevel>0</Sublevel>
605
+ <SalesTaxCodeRef>
606
+ <ListID>10000-999021789</ListID>
607
+ <FullName>Tax</FullName>
608
+ </SalesTaxCodeRef>
609
+ <SalesDesc>Plastic sprinkler piping</SalesDesc>
610
+ <SalesPrice>2.75</SalesPrice>
611
+ <IncomeAccountRef>
612
+ <ListID>1D0000-934380913</ListID>
613
+ <FullName>Landscaping Services:Job Materials:Sprinklers &amp; Drip systems</FullName>
614
+ </IncomeAccountRef>
615
+ <PurchaseDesc>Plastic sprinkler piping #1098-20</PurchaseDesc>
616
+ <PurchaseCost>2.10</PurchaseCost>
617
+ <COGSAccountRef>
618
+ <ListID>240000-934380913</ListID>
619
+ <FullName>Cost of Goods Sold</FullName>
620
+ </COGSAccountRef>
621
+ <AssetAccountRef>
622
+ <ListID>60000-934380912</ListID>
623
+ <FullName>Inventory Asset</FullName>
624
+ </AssetAccountRef>
625
+ <ReorderPoint>250</ReorderPoint>
626
+ <QuantityOnHand>826</QuantityOnHand>
627
+ <AverageCost>2.10</AverageCost>
628
+ <QuantityOnOrder>115</QuantityOnOrder>
629
+ <QuantityOnSalesOrder>0</QuantityOnSalesOrder>
630
+ </ItemInventoryRet>
631
+ </ItemQueryRs>
632
+ </QBXMLMsgsRs>
633
+ </QBXML>