⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 builder.cpp.html

📁 《Big C++ 》Third Edition电子书和代码全集-Part1
💻 HTML
字号:
<html>

<head>
	<title>builder.cpp</title>
</head>

<body>
<pre>  1  #include &lt;string&gt;
  2  #include &lt;sstream&gt;
  3  #include &lt;vector&gt;
  4  #include &lt;xercesc/dom/DOM.hpp&gt;
  5  #include &lt;xercesc/util/XMLString.hpp&gt;
  6  #include &lt;xercesc/util/PlatformUtils.hpp&gt;
  7  #include &lt;xercesc/framework/StdOutFormatTarget.hpp&gt;
  8  
  9  #include "item.h"
 10  
 11  using namespace std;
 12  using namespace xercesc;
 13  
 14  <font color='#0000cc'>/**
 15     Creates a DOM element with a given name.
 16     @param doc the document that creates the element
 17     @param name the element name
 18     @return an element with the given name
 19  */</font>
 20  DOMElement* create_element(DOMDocument* doc, string name)
 21  {
 22     XMLCh* xname = new XMLCh[name.length() + 1];
 23     XMLString::transcode(name.c_str(), xname, name.length());
 24     DOMElement* r = doc-&gt;createElement(xname);
 25     delete xname;
 26     return r;
 27  }
 28  
 29  <font color='#0000cc'>/**
 30     Creates a DOM element containing a text node.
 31     @param doc the document that creates the element
 32     @param name the element name
 33     @param text the text for the text node
 34     @return an element with the given name and a child that is a
 35     text node with the given text
 36  */</font>
 37  DOMElement* create_text_element(DOMDocument* doc,
 38     string name, string text)
 39  {
 40     XMLCh* xtext = new XMLCh[text.length() + 1];
 41     XMLString::transcode(text.c_str(), xtext, text.length());
 42     DOMText* textNode = doc-&gt;createTextNode(xtext);
 43     delete xtext;
 44  
 45     DOMElement* r = create_element(doc, name);
 46     r-&gt;appendChild(textNode);
 47  
 48     return r;
 49  }
 50  
 51  <font color='#0000cc'>/**
 52     Converts an floating-point value to a string, e.g. 3.14 -&gt; "3.14".
 53     @param n an floating-point value
 54     @return the equivalent string
 55  */</font>
 56  string double_to_string(double n)
 57  {
 58     ostringstream outstr;
 59     outstr &lt;&lt; n;
 60     return outstr.str();
 61  }
 62  
 63  <font color='#0000cc'>/**
 64     Builds a DOM element for a product.
 65     @param p the product
 66     @return a DOM element describing the product
 67  */</font>
 68  DOMElement* create_product(DOMDocument* doc, const Product&amp; p)
 69  {
 70     DOMElement* description_element = create_text_element(doc,
 71        "description", p.get_description());
 72     DOMElement* price_element = create_text_element(doc,
 73        "price", double_to_string(p.get_price()));
 74  
 75     DOMElement* product_element = create_element(doc, "product");
 76     product_element-&gt;appendChild(description_element);
 77     product_element-&gt;appendChild(price_element);
 78  
 79     return product_element;
 80  }
 81  
 82  <font color='#0000cc'>/**
 83     Builds a DOM element for an item.
 84     @param anItem the item
 85     @return a DOM element describing the item
 86  */</font>
 87  DOMElement* create_item(DOMDocument* doc, const Item&amp; anItem)
 88  {
 89     DOMElement* product_element
 90        = create_product(doc, anItem.get_product());
 91     DOMElement* quantity_element = create_text_element(doc,
 92        "quantity", double_to_string(anItem.get_quantity()));
 93  
 94     DOMElement* item_element = create_element(doc, "item");
 95     item_element-&gt;appendChild(product_element);
 96     item_element-&gt;appendChild(quantity_element);
 97  
 98     return item_element;
 99  }
100  
101  <font color='#0000cc'>/**
102     Builds a DOM element for an array list of items.
103     @param items the items
104     @return a DOM element describing the items
105  */</font>
106  DOMElement* create_item_list(DOMDocument* doc,
107     const vector&lt;Item&gt;&amp; items)
108  {
109     DOMElement* items_element = create_element(doc, "items");
110     for (int i = 0; i &lt; items.size(); i++)
111     {
112        DOMElement* item_element = create_item(doc, items[i]);
113        items_element-&gt;appendChild(item_element);
114     }
115     return items_element;
116  }
117  
118  int main()
119  {
120     XMLPlatformUtils::Initialize();
121  
122     <font color='#0000cc'>// populate vector of items</font>
123     vector&lt;Item&gt; items;
124     items.push_back(Item(Product("Toaster", 29.95), 3));
125     items.push_back(Item(Product("Hair dryer", 24.95), 1));
126  
127     <font color='#0000cc'>// build the DOM document</font>
128     DOMImplementation* implementation
129        = DOMImplementation::getImplementation();
130     DOMDocument* doc = implementation-&gt;createDocument();
131     doc-&gt;setStandalone(true);
132  
133     DOMElement* root = create_item_list(doc, items);
134     doc-&gt;appendChild(root);
135  
136     <font color='#0000cc'>// print the DOM document</font>
137  
138     DOMWriter* writer = implementation-&gt;createDOMWriter();
139     writer-&gt;setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
140     XMLFormatTarget* out = new StdOutFormatTarget();
141     writer-&gt;writeNode(out, *doc);
142  
143     writer-&gt;release();
144     doc-&gt;release();
145  
146     return 0;
147  }</pre>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -