📄 parser2.cpp.html
字号:
<html>
<head>
<title>parser2.cpp</title>
</head>
<body>
<pre> 1 #include <string>
2 #include <sstream>
3 #include <vector>
4 #include <xercesc/dom/DOM.hpp>
5 #include <xercesc/util/XMLString.hpp>
6 #include <xercesc/util/PlatformUtils.hpp>
7
8 #include "item.h"
9
10 using namespace std;
11 using namespace xercesc;
12
13 <font color='#0000cc'>/*
14 Converts a sequence of XMLCh characters to a string.
15 @param in the sequence of XMLCh characters
16 @return the transcoded string
17 */</font>
18 string XMLCh_to_string(const XMLCh* in)
19 {
20 char* s = XMLString::transcode(in);
21 string r(s);
22 XMLString::release(&s);
23 return r;
24 }
25
26 <font color='#0000cc'>/**
27 Converts a string to a floating-point value, e.g. "3.14" -> 3.14.
28 @param s a string representing a floating-point value
29 @return the equivalent floating-point value
30 */</font>
31 double string_to_double(string s)
32 {
33 istringstream instr(s);
34 double x;
35 instr >> x;
36 return x;
37 }
38
39 <font color='#0000cc'>/**
40 Converts a string to an integer, e.g. "314" -> 314.
41 @param s a string representing an integer
42 @return the equivalent integer
43 */</font>
44 int string_to_int(string s)
45 {
46 istringstream instr(s);
47 int x;
48 instr >> x;
49 return x;
50 }
51
52 <font color='#0000cc'>/**
53 Obtains a product from a DOM element
54 @param e a <product> element
55 @return the product described by the given element
56 */</font>
57 Product get_product(DOMNode* e)
58 {
59 DOMNodeList* children = e->getChildNodes();
60
61 DOMText* textNode
62 = dynamic_cast<DOMText*>(children->item(0)->getFirstChild());
63 string name = XMLCh_to_string(textNode->getData());
64
65 textNode
66 = dynamic_cast<DOMText*>(children->item(1)->getFirstChild());
67 string price_text = XMLCh_to_string(textNode->getData());
68 double price = string_to_double(price_text);
69
70 return Product(name, price);
71 }
72
73 <font color='#0000cc'>/**
74 Obtains an item from a DOM element
75 @param e an <item> element
76 @return the item described by the given element
77 */</font>
78 Item get_item(DOMNode* e)
79 {
80 DOMNodeList* children = e->getChildNodes();
81 Product p = get_product(children->item(0));
82
83 DOMText* textNode = dynamic_cast<DOMText*>(
84 children->item(1)->getFirstChild());
85 string quantity_text = XMLCh_to_string(textNode->getData());
86 int quantity = string_to_int(quantity_text);
87
88 return Item(p, quantity);
89 }
90
91 <font color='#0000cc'>/**
92 Obtains an array list of items from a DOM element
93 @param e an <items> element
94 @return a vector of all <item> children of e
95 */</font>
96 vector<Item> get_items(DOMNode* e)
97 {
98 vector<Item> items;
99
100 <font color='#0000cc'>// get the <item> children</font>
101
102 DOMNodeList* children = e->getChildNodes();
103 for (int i = 0; i < children->getLength(); i++)
104 {
105 Item c = get_item(children->item(i));
106 items.push_back(c);
107 }
108 return items;
109 }
110
111 class SimpleErrorHandler : public DOMErrorHandler
112 {
113 public:
114 bool handleError(const DOMError& domError);
115 };
116
117 bool SimpleErrorHandler::handleError(const DOMError& error)
118 {
119 cout << XMLCh_to_string(error.getLocation()->getURI())
120 << ", line " << error.getLocation()->getLineNumber()
121 << ", char " << error.getLocation()->getColumnNumber()
122 << ": " << XMLCh_to_string(error.getMessage()) << "\n";
123 return error.getSeverity() != DOMError::DOM_SEVERITY_FATAL_ERROR;
124 }
125
126 int main()
127 {
128 XMLPlatformUtils::Initialize();
129
130 DOMImplementation* implementation
131 = DOMImplementation::getImplementation();
132 DOMBuilder* parser = implementation->createDOMBuilder(
133 DOMImplementationLS::MODE_SYNCHRONOUS, NULL);
134 DOMErrorHandler* handler = new SimpleErrorHandler();
135 parser->setErrorHandler(handler);
136 parser->setFeature(XMLUni::fgDOMValidation, true);
137 parser->setFeature(XMLUni::fgDOMWhitespaceInElementContent, false);
138 DOMDocument* doc = parser->parseURI("items.xml");
139
140 DOMNode* root = doc->getDocumentElement();
141 vector<Item> items = get_items(root);
142
143 for (int i = 0; i < items.size(); i++)
144 items[i].print();
145
146 parser->release();
147 delete handler;
148
149 return 0;
150 }</pre>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -