1 はじめに
XMLは明確なツリー状の階層構造を持ち、設定ファイルとして非常に適しています。 DOM XML を PHP で使用して XML を操作できます。この記事では、PHP が DOM XML を使用して XML ファイルを作成、追加し、クエリを実行する方法について概要を説明します。
2. DOM XML を使用する
XMLのノードは要素とテキストに分かれています DOMDocument型はドキュメント型であり、要素やテキストを操作するためのメンバ関数と属性を提供します。
DOMDocumentクラスは次のとおりです:
コードをコピー
DOMDocument は DOMNode を拡張します {
/* プロパティ */
読み取り専用パブリック文字列 $actualEncoding ;
readonly public DOMConfiguration $config ;
読み取り専用パブリック DOMDocumentType $doctype ;
readonly public DOMElement $documentElement ;
パブリック文字列 $documentURI ;
公開文字列 $encoding ;
public bool $formatOutput ;
読み取り専用パブリック DOMImplementation $implementation ;
パブリックブール $preserveWhiteSpace =true ;
パブリックブール $recover ;
public bool $resolveExternals ;
パブリック ブール $スタンドアロン ;
public bool $strictErrorChecking =true ;
パブリック ブール $substituteEntities ;
パブリックブール $validateOnParse =false ;
公開文字列 $version ;
読み取り専用パブリック文字列 $xmlEncoding ;
パブリック ブール $xmlスタンドアロン ;
パブリック文字列 $xmlVersion ;
/* メソッド */
__construct ([ string $version [, string $encoding ]] )
DOMAttr createAttribute (文字列 $name)
DOMAttr createAttributeNS ( string $namespaceURI , string $qualifiedName )
DOMCDATASection createCDATASection ( string $data )
DOMComment createComment (string $data)
DOMDocumentFragment createDocumentFragment (void)
DOMElement createElement ( string $name [, string $value ] )
DOMElement createElementNS ( string $namespaceURI , string $qualifiedName [, string $value ] )
DOMEntityReference createEntityReference (文字列 $name)
DOMProcessing命令 createProcessing命令 ( string $target [, string $data ] )
DOMText createTextNode (string $content)
DOMElement getElementById ( string $elementId )
DOMNodeList getElementsByTagName ( string $name )
DOMNodeList getElementsByTagNameNS ( string $namespaceURI , string $localName )
DOMNode importNode ( DOMNode $importedNode [, bool $deep ] )
混合ロード ( string $filename [, int $options=0 ] )
bool loadHTML (string $source)
bool loadHTMLFile (string $filename)
混合loadXML ( string $source [, int $options=0 ] )
voidnormalizeDocument (void)
bool registerNodeClass ( string $baseclass 、 string $extendedclass )
bool RelaxNGValidate (文字列 $filename)
bool RelaxNGValidateSource ( string $source )
int save ( string $filename [, int $options ] )
文字列 saveHTML (void)
int saveHTMLFile (string $filename)
string saveXML ([ DOMNode $node [, int $options ]] )
bool schemaValidate (string $filename)
bool schemaValidateSource ( string $source )
ブール検証 (無効化)
int xinclude ([ int $options ] )
/* 継承されたメソッド */
DOMNode DOMNode::appendChild ( DOMNode $newnode )
DOMNode DOMNode::cloneNode ([ bool $deep ] )
bool DOMNode::hasAttributes (void)
bool DOMNode::hasChildNodes (void)
DOMNode DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
bool DOMNode::isDefaultNamespace ( string $namespaceURI )
bool DOMNode::isSameNode ( DOMNode $node )
bool DOMNode::isSupported ( string $feature , string $version )
文字列 DOMNode::lookupNamespaceURI ( string $prefix )
string DOMNode::lookupPrefix ( string $namespaceURI )
void DOMNode::normalize (void)
DOMNode DOMNode::removeChild ( DOMNode $oldnode )
DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
}
コードをコピー
要素ノードクラスのDOMElementタイプは次のように定義されます:
コードをコピー
1 DOMElement は DOMNode を拡張します {
2 /* プロパティ */
3 読み取り専用 public bool $schemaTypeInfo ;
4 読み取り専用パブリック文字列 $tagName ;
5 /* メソッド */
6 __construct ( string $name [, string $value [, string $namespaceURI ]] )
7 文字列 getAttribute ( string $name )
8 DOMAttr getAttributeNode ( string $name )
9 DOMAttr getAttributeNodeNS ( string $namespaceURI , string $localName )
10 string getAttributeNS ( string $namespaceURI , string $localName )
11 DOMNodeList getElementsByTagName ( string $name )
12 DOMNodeList getElementsByTagNameNS ( string $namespaceURI , string $localName )
13 bool hasAttribute ( string $name )
14 bool hasAttributeNS ( string $namespaceURI , string $localName )
15 bool RemoveAttribute ( string $name )
16 bool RemoveAttributeNode ( DOMAttr $oldnode )
17 bool RemoveAttributeNS ( string $namespaceURI , string $localName )
18 DOMAttr setAttribute ( string $name , string $value )
19 DOMAttr setAttributeNode ( DOMAttr $attr )
20 DOMAttr setAttributeNodeNS (DOMAttr $attr )
21 void setAttributeNS ( string $namespaceURI , string $qualifiedName , string $value )
22 void setIdAttribute ( string $name , bool $isId )
23 void setIdAttributeNode ( DOMAttr $attr , bool $isId )
24 void setIdAttributeNS ( string $namespaceURI , string $localName , bool $isId )
25 /* 継承されたメソッド */
26 DOMNode DOMNode::appendChild ( DOMNode $newnode )
27 DOMNode DOMNode::cloneNode ([ bool $deep ] )
28 bool DOMNode::hasAttributes ( void )
29 bool DOMNode::hasChildNodes ( void )
30 DOMNode DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
31 bool DOMNode::isDefaultNamespace ( string $namespaceURI )
32 bool DOMNode::isSameNode ( DOMNode $node )
33 bool DOMNode::isSupported ( string $feature , string $version )
34 文字列 DOMNode::lookupNamespaceURI (文字列 $prefix )
35 string DOMNode::lookupPrefix ( string $namespaceURI )
36 void DOMNode::normalize ( void )
37 DOMNode DOMNode::removeChild ( DOMNode $oldnode )
38 DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
39 }
复制幣
文本型DOMText定義如下:
复制幣
DOMText は DOMCharacterData を拡張します {
/* プロパティ */
読み取り専用パブリック文字列 $wholeText ;
/* メソッド */
__construct ([ string $value ] )
bool isWhitespaceInElementContent ( void )
DOMText SplitText ( int $offset )
/* 継承されたメソッド */
void DOMCharacterData::appendData ( string $data )
void DOMCharacterData::deleteData ( int $offset , int $count )
void DOMCharacterData::insertData ( int $offset , string $data )
void DOMCharacterData::replaceData ( int $offset , int $count , string $data )
string DOMCharacterData::substringData ( int $offset , int $count )
}
复制幣
DOMNode 点定義次のとおり:
复制幣
DOMノード{
/* プロパティ */
パブリック読み取り専用文字列 $nodeName ;
パブリック文字列 $nodeValue ;
public readonly int $nodeType ;
パブリック読み取り専用 DOMNode $parentNode ;
パブリック読み取り専用 DOMNodeList $childNodes ;
パブリック読み取り専用 DOMNode $firstChild ;
パブリック読み取り専用 DOMNode $lastChild ;
パブリック読み取り専用 DOMNode $previousSibling ;
パブリック読み取り専用 DOMNode $nextSibling ;
パブリック読み取り専用 DOMNamedNodeMap $attributes ;
パブリック読み取り専用 DOMDocument $ownerDocument ;
パブリック読み取り専用文字列 $namespaceURI ;
公開文字列 $prefix ;
パブリック読み取り専用文字列 $localName ;
パブリック読み取り専用文字列 $baseURI ;
パブリック文字列 $textContent ;
/* メソッド */
DOMNode appendChild ( DOMNode $newnode )
DOMNode cloneNode ([ bool $deep ] )
bool hasAttributes ( void )
bool hasChildNodes ( void )
DOMNode insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
bool isDefaultNamespace ( string $namespaceURI )
bool isSameNode ( DOMNode $node )
bool isSupported ( string $feature , string $version )
文字列 lookupNamespaceURI ( string $prefix )
文字列 lookupPrefix ( string $namespaceURI )
void 正規化 ( void )
DOMNode 削除子 ( DOMNode $oldnode )
DOMNode replaceChild ( DOMNode $newnode 、 DOMNode $oldnode )
}
复制幣
3、测试程序
复制幣
1
2
3 const INDEX_FILE_NAME = "student_file_index.xml";
4
5 //文件索引类
6 クラス file_index
7 {
8 パブリック関数 set_file_index($file_name, $cur_count, $total_count)
9 {
10 $this->file_name = $file_name;
11 $this->cur_count = $cur_count;
12 $this->total_count = $total_count;
13 }
14 パブリック関数 get_file_name()
15 {
16 $this->file_name;
を返す
17 }
18 パブリック関数 get_cur_count()
19 {
20 return $this->cur_count;
21 }
22 パブリック関数 get_total_count()
23 {
24 $this->total_count;
を返す
25 }
26
27 プライベート $file_name; //文件名
28 プライベート $cur_count; //当前记录数
29 プライベート $total_count; //总记录数
30 }
31
32 関数 create_file_index(array $params)
33 {
34 $index = new file_index();
35 $index->set_file_index($params['file_name'],
)
36 $params['cur_count'], $params['total_count']);
37 $index;
を返す
38 }
39
40 function create_file_node(DOMDocument $doc, file_index $index)
41 {
42 //创建一ファイル元素
43 $file = $doc->createElement("file");
44 //创建一属性元素
45 $name_attr = $doc->createAttribute("name");
46 // このプロパティをファイル要素上に追加します
47 $file->appendChild($name_attr);
48
49 //创建一文本元素
50 $file_name = $doc->createTextNode($index->get_file_name());
51 //将文本元素追加name_attrプロパティ上
52 $name_attr->appendChild($file_name);
53
54 //创建一个cur_count元素
55 $cur_count = $doc->createElement("cur_count", strval($index->get_cur_count()));
56 // ファイル元素の下に cur_count を追加します
57 $cur_count = $file->appendChild($cur_count);
58
59 //创建一total_count元素
60 $total_count = $doc->createElement("total_count",
)
61 strval($index->get_total_count()));
62 //total_count をファイル元素の下に追加します
63 $total_count = $file->appendChild($total_count);
64
65 $file を返します;
66 }
67
68 関数 create_index_file($index_file_name, array $params)
69 {
70 //创建一文档
71 $doc = new DOMDocument("1.0", "utf-8");
72 //创建根元素
73 $root = $doc->createElement("index");
74 $root = $doc->appendChild($root);
75
76 //创建一个インデックス结构
77 $index = create_file_index($params);
78 $file = create_file_node($doc, $index);
79
80 //将ファイル見る根元素下
81 $root->appendChild($file);
82 $doc->save($index_file_name);
83 true を返します。
84 }
85
86 関数 add_index_file($index_file_name, 配列 $params)
87 {
88 //创建一文档
89 $doc = 新しい DOMDocument();
90 //追加xml文件
91 $doc->load($index_file_name);
92 //获取index元素列表
93 $node_list = $doc->getElementsByTagName('index');
94 //获取根元素
95 $root = $node_list->item(0);
96 //创建一个インデックス结构
97 $index = create_file_index($params);
98 $file = create_file_node($doc, $index);
99 //将ファイル看到根元素下
100 $root->appendChild($file);
101 $doc->save($index_file_name);
102 }
103
104 関数 traverse_file_index($index_file_name)
105{
106 $file_index = array();
107 $doc = 新しい DOMDocument();
108 $doc->load($index_file_name);
109 //ファイル要素のコレクションを取得します
110 $file_list = $doc->getElementsByTagName('file');
111 //cur_count要素コレクションを取得
112 $cur_count_list = $doc->getElementsByTagName('cur_count');
113 //total_count要素コレクションを取得します
114 $total_count_list = $doc->getElementsByTagName('total_count');
115 for ($i = 0; $i length; $i++) {
116 $index = 新しいファイルインデックス();
117 //ファイル要素のname属性値を取得します
118 $file_name = $file_list->item($i)->属性->getNamedItem("name")->nodeValue;
119 $index->set_file_index($file_name, $cur_count_list->item($i)->nodeValue,
120 $total_count_list->item($i)->nodeValue);
121 $file_index[$i] = $index;
122 }
123
124 return $file_index;
125 }
126
127 /*****************テスト用*********************/
128 $params = 配列();
129 $インデックスファイル名 = INDEX_FILE_NAME;
130
131 if (file_exists($index_file_name)) {
132 $params['file_name'] = "student_info_2014_02_12";
133 $params['cur_count'] = 10;
134 $params['total_count'] = 10;
135 echo "インデックスを file.n に追加";
136 add_index_file($index_file_name, $params);
137 }
138 他 {
139 $params['file_name'] = "student_info_2014_02_11";
140 $params['cur_count'] = 23;
141 $params['total_count'] = 33;
142 echo "インデックスファイルを作成.n";
143 create_index_file($index_file_name, $params);
144 }
145
146 //xmファイルの読み込みテスト
147 echo "「.$index_file_name."n からインデックスの内容を読み取ります」;
148 エコー "file_nametttcur_countttotal_count.n";
149 $file_index = traverse_file_index($index_file_name);
150 foreach($file_index as $index) {
151 echo $index->get_file_name();
152 エコー「tt」;
153 echo $index->get_cur_count();
154 エコー strval($cur_count);
155 エコー「tt」;
156 echo $index->get_total_count();
157 エコー「n」;
158 }
http://www.bkjia.com/PHPjc/735885.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735885.html技術記事 1. はじめに XML は明確なツリー状の階層構造を持っており、設定ファイルとして非常に適しています。 DOM XML を PHP で使用して XML を操作できます。この記事では、PHP が DOM XML を使用して XML ファイルを作成、追加、クエリする方法についてまとめています...