Chèn thêm thẻ vào XML

Mình có 1 file XML, bên trong cơ bản như này:

	<data>
		<name>XXXX</name>
	</data>
	...
	<data>
		<name>XXXX</name>
	</data>

Giờ mình muốn chèn thêm <id> vào trước <name> và bên dưới <data> thành như này:

	<data>
		<id>1001</id>
		<name>XXXX</name>
	</data>
	...
	<data>
		<id>1105</id>
		<name>XXXX</name>
	</data>

Mình đã thử sử dụng for trong PHP như này:

$data = "	<data>
		<name>XXXX</name>
	...
	<data>
		<name>XXXX</name>";
for($i = 1001; $i <= 1105; $i++) {
	$print = "<id>".$i."</id>";
	$replace = str_replace("	<data>
		<name>", "	<data>
		$print
		<name>", $data);
	echo $replace;
}

Nhưng kết quả nó lại in ra tận 105 lần, như này:

	<data>
		<id>1001</id>
		<name>XXXX</name>
	</data>
	...
	<data>
		<id>1001</id>
		<name>XXXX</name>
	</data>
	<data>
		<id>1002</id>
		<name>XXXX</name>
	</data>
	...
	<data>
		<id>1002</id>
		<name>XXXX</name>
	</data>
	...
	<data>
		<id>1105</id>
		<name>XXXX</name>
	</data>
	...
	<data>
		<id>1105</id>
		<name>XXXX</name>
	</data>

Xin hãy giúp mình khắc phục lỗi sai, hoặc cách khác để gán được <id> tăng dần vào file XML trên?

Hàm str_replace() sẽ thay tất cả chuỗi con cần tìm bằng chuỗi cần thế vào.
Bạn lặp 105 lần tức là bạn đã tạo ra 105 chuỗi thế (<id>...</id>). Mỗi lần tạo 1 chuỗi thế thì nó sẽ thay cho tất cả vị trí cần thay trong 1 lần.

Hàm bạn cần là: preg_replace_callback()
Tìm hiểu về Biểu thức chính quy (Regular Expression) gọi tắt là Regex.
Trong hàm callback thì bạn thực hiện trả về chuỗi với số tăng dần.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?