如何使用php阅读这种xml

时间:2012-03-12 19:16:08

标签: php xml

我有一个xml文件,我想用php读取它,但我不知道如何解决它。我搜索过,找不到解决方案。

你想帮我吗?

file.xml:

 <?xml version="1.0"?>
-<map name="mapname" description="just a map">
<line s="1" c="" a="100"/>
,
-<line s="6" c="" a="100">
<p x="121" y="212"/>
<p x="124" y="208"/>
<p x="128" y="204"/>
<p x="132" y="201"/>
<p x="133" y="199"/>
<p x="137" y="196"/>
<p x="140" y="192"/>
<p x="144" y="187"/>
<p x="148" y="182"/>
<p x="152" y="180"/>
<p x="156" y="175"/>
<p x="157" y="172"/>
<p x="160" y="170"/>
<p x="163" y="167"/>
<p x="165" y="165"/>
<p x="168" y="162"/>
<p x="170" y="160"/>
<p x="173" y="157"/>
<p x="181" y="159"/>
<p x="184" y="164"/>
<p x="184" y="169"/>
<p x="186" y="172"/>
<p x="188" y="177"/>
<p x="188" y="181"/>
<p x="188" y="187"/>
<p x="188" y="190"/>
<p x="188" y="195"/>
<p x="187" y="199"/>
<p x="187" y="205"/>
<p x="187" y="209"/>
<p x="187" y="215"/>
<p x="187" y="218"/>
<p x="187" y="222"/>
<p x="187" y="224"/>
<p x="187" y="225"/>
<p x="187" y="227"/>
<p x="187" y="228"/>
<p x="187" y="229"/>
<p x="187" y="230"/>
</line>
,
-<line s="6" c="" a="100">
<p x="133" y="203"/>
<p x="137" y="203"/>
<p x="143" y="203"/>
<p x="149" y="203"/>
<p x="157" y="203"/>
<p x="161" y="203"/>
<p x="165" y="203"/>
<p x="174" y="203"/>
<p x="177" y="203"/>
<p x="180" y="203"/>
<p x="183" y="203"/>
<p x="184" y="203"/>
<p x="185" y="203"/>
<p x="185" y="204"/>
</line>
</map>

我想使用循环读取s =“1”c =“”a =“100” 我想用循环

读X =“121”y =“212”

我想要像

这样的东西
$xml=simplexml_load_file('file.xml'); 

foreach($xml->line->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";

foreach($xml->p->attributes() as $c => $d) {
    echo $c,'="',$d,"\"\n";
}
}

谢谢你, 麦克


解决方案归功于pthurmond,Josh和Paulsm4

<?php

$xml = simplexml_load_file("file.xml");

foreach ($xml->line AS $line) {

$attributes = $line->attributes();

$s = $attributes['s'];
echo $s;

  foreach ($line->p AS $point) {
    $attributes = $point->attributes();
    $x = $attributes['x'];
    $y = $attributes['y'];
    echo "X: $x, Y: $y\n<br>\n";
  }


}

  ?>

输出:

16X: 121, Y: 212 
X: 124, Y: 208 
X: 128, Y: 204 
X: 132, Y: 201 
X: 133, Y: 199 
X: 137, Y: 196 
X: 140, Y: 192 
X: 144, Y: 187 
X: 148, Y: 182 
X: 152, Y: 180 
X: 156, Y: 175 
X: 157, Y: 172 
X: 160, Y: 170 
X: 163, Y: 167 
X: 165, Y: 165 
X: 168, Y: 162 
X: 170, Y: 160 
X: 173, Y: 157 
X: 181, Y: 159 
X: 184, Y: 164 
X: 184, Y: 169 
X: 186, Y: 172 
X: 188, Y: 177 
X: 188, Y: 181 
X: 188, Y: 187 
X: 188, Y: 190 
X: 188, Y: 195 
X: 187, Y: 199 
X: 187, Y: 205 
X: 187, Y: 209 
X: 187, Y: 215 
X: 187, Y: 218 
X: 187, Y: 222 
X: 187, Y: 224 
X: 187, Y: 225 
X: 187, Y: 227 
X: 187, Y: 228 
X: 187, Y: 229 
X: 187, Y: 230 
6X: 133, Y: 203 
X: 137, Y: 203 
X: 143, Y: 203 
X: 149, Y: 203 
X: 157, Y: 203 
X: 161, Y: 203 
X: 165, Y: 203 
X: 174, Y: 203 
X: 177, Y: 203 
X: 180, Y: 203 
X: 183, Y: 203 
X: 184, Y: 203 
X: 185, Y: 203 
X: 185, Y: 204 
6X: 218, Y: 202 
X: 218, Y: 205 
X: 218, Y: 208 
X: 219, Y: 212 
X: 220, Y: 214 
X: 220, Y: 217 
X: 220, Y: 219 
X: 220, Y: 221 
X: 220, Y: 222 
X: 220, Y: 223 
X: 220, Y: 224 
X: 221, Y: 221 
X: 223, Y: 214 
X: 223, Y: 206 
X: 223, Y: 201 
X: 224, Y: 194 
X: 225, Y: 191 
X: 226, Y: 187 
X: 228, Y: 182 
X: 229, Y: 181 
X: 230, Y: 179 
X: 234, Y: 177 
X: 236, Y: 176 
X: 237, Y: 175 
X: 238, Y: 175 
X: 239, Y: 174 
X: 241, Y: 174 
X: 241, Y: 173 
X: 242, Y: 173 
X: 243, Y: 173 
X: 244, Y: 176 
X: 244, Y: 181 
X: 245, Y: 187 
X: 246, Y: 192 
X: 246, Y: 200 
X: 246, Y: 205 
X: 246, Y: 212 
X: 245, Y: 218 
X: 245, Y: 221 
X: 244, Y: 224 
X: 244, Y: 226 
X: 243, Y: 226 
X: 243, Y: 227 
X: 244, Y: 224 
X: 249, Y: 216 
X: 251, Y: 213 
X: 254, Y: 207 
X: 257, Y: 201 
X: 260, Y: 197 
X: 263, Y: 191 
X: 265, Y: 188 
X: 268, Y: 183 
X: 268, Y: 182 
X: 271, Y: 178 
X: 275, Y: 175 
X: 277, Y: 173 
X: 279, Y: 171 
X: 280, Y: 171 
X: 281, Y: 170 
X: 282, Y: 170 
X: 282, Y: 169 
X: 282, Y: 170 
X: 284, Y: 172 
X: 286, Y: 177 
X: 287, Y: 180 
X: 288, Y: 185 
X: 289, Y: 190 
X: 290, Y: 193 
X: 290, Y: 196 
X: 290, Y: 199 
X: 290, Y: 202 
X: 290, Y: 206 
X: 290, Y: 209 
X: 290, Y: 214 
X: 290, Y: 217 
X: 290, Y: 219 
X: 289, Y: 220 
X: 289, Y: 221 
6X: 320, Y: 195 
X: 319, Y: 195 
X: 313, Y: 195 
X: 310, Y: 195 
X: 306, Y: 195 
X: 303, Y: 196 
X: 299, Y: 199 
X: 296, Y: 200 
X: 294, Y: 203 
X: 292, Y: 207 
X: 291, Y: 209 
X: 290, Y: 212 
X: 289, Y: 215 
X: 289, Y: 216 
X: 289, Y: 218 
X: 290, Y: 219 
X: 290, Y: 220 
X: 290, Y: 221 
X: 290, Y: 222 
X: 292, Y: 222 
X: 293, Y: 223 
X: 295, Y: 224 
X: 298, Y: 225 
X: 301, Y: 225 
X: 304, Y: 225 
X: 307, Y: 225 
X: 311, Y: 225 
X: 314, Y: 225 
X: 317, Y: 225 
X: 320, Y: 224 
X: 322, Y: 220 
X: 324, Y: 219 
X: 325, Y: 217 
X: 326, Y: 212 
X: 326, Y: 208 
X: 326, Y: 205 
X: 326, Y: 201 
X: 326, Y: 198 
X: 326, Y: 195 
X: 326, Y: 193 
X: 326, Y: 191 
X: 326, Y: 190 
X: 326, Y: 189 
X: 326, Y: 188 
X: 326, Y: 190 
X: 326, Y: 194 
X: 326, Y: 197 
X: 326, Y: 200 
X: 326, Y: 202 
X: 326, Y: 205 
X: 326, Y: 207 
X: 326, Y: 210 
X: 326, Y: 212 
X: 327, Y: 213 
X: 327, Y: 214 
X: 327, Y: 215 
X: 328, Y: 215 
X: 329, Y: 215 
X: 331, Y: 215 
6X: 350, Y: 192 
X: 351, Y: 194 
X: 351, Y: 198 
X: 352, Y: 201 
X: 354, Y: 204 
X: 357, Y: 208 
X: 359, Y: 211 
X: 362, Y: 215 
X: 365, Y: 217 
X: 367, Y: 219 
X: 368, Y: 220 
X: 369, Y: 221 
X: 370, Y: 222 
X: 371, Y: 222 
X: 372, Y: 222 
X: 373, Y: 222 
X: 374, Y: 222 
X: 377, Y: 222 
X: 379, Y: 222 
X: 382, Y: 221 
X: 383, Y: 219 
X: 386, Y: 218 
X: 388, Y: 214 
X: 389, Y: 212 
X: 389, Y: 209 
X: 389, Y: 206 
X: 389, Y: 202 
X: 389, Y: 198 
X: 389, Y: 195 
X: 388, Y: 192 
X: 388, Y: 190 
X: 388, Y: 189 
X: 388, Y: 190 
X: 388, Y: 192 
X: 388, Y: 196 
X: 388, Y: 199 
X: 389, Y: 202 
X: 390, Y: 206 
X: 391, Y: 208 
X: 391, Y: 212 
X: 392, Y: 214 
X: 392, Y: 216 
X: 392, Y: 218 
X: 393, Y: 220 
X: 393, Y: 221 
X: 393, Y: 222 
X: 394, Y: 223 
X: 394, Y: 224 
X: 394, Y: 225 
X: 395, Y: 225 
6X: 405, Y: 196 
X: 406, Y: 198 
X: 407, Y: 203 
X: 408, Y: 208 
X: 408, Y: 212 
X: 409, Y: 215 
X: 409, Y: 218 
X: 409.95, Y: 221 
X: 410.95, Y: 224 
X: 410.95, Y: 226 
X: 410.95, Y: 225 
X: 410.95, Y: 223 
X: 410.95, Y: 219 
X: 410.95, Y: 217 
X: 411.95, Y: 212 
X: 411.95, Y: 209 
X: 412.95, Y: 206 
X: 413.95, Y: 205 
X: 414.95, Y: 202 
X: 415.95, Y: 200 
X: 417.95, Y: 199 
X: 418.95, Y: 198 
X: 419.95, Y: 197 
X: 421.95, Y: 195 
X: 423.95, Y: 194 
X: 424.95, Y: 194 
X: 426.95, Y: 194 
X: 429.95, Y: 193 
X: 430.95, Y: 193 
X: 431.95, Y: 193 
6X: 435.95, Y: 181 
X: 435.95, Y: 183 
X: 435.95, Y: 185 
X: 436.95, Y: 190 
X: 436.95, Y: 193 
X: 438.95, Y: 197 
X: 440.95, Y: 200 
X: 442.95, Y: 205 
X: 444.95, Y: 208 
X: 447.95, Y: 212 
X: 451.95, Y: 215 
X: 452.95, Y: 216 
X: 453.95, Y: 217 
X: 455.95, Y: 218 
X: 455.95, Y: 219 
X: 456.95, Y: 219 
X: 456.95, Y: 218 
X: 458.95, Y: 218 
X: 458.95, Y: 217 
X: 459.95, Y: 216 
X: 460.95, Y: 214 
X: 464.95, Y: 212 
X: 464.95, Y: 211 
X: 466.95, Y: 209 
6X: 466.95, Y: 201 
X: 464.95, Y: 203 
X: 462.95, Y: 205 
X: 461.95, Y: 208 
X: 459.95, Y: 210 
X: 457.95, Y: 214 
X: 455.95, Y: 217 
X: 454.95, Y: 221 
X: 452.95, Y: 223 
X: 449.95, Y: 227 
X: 448.95, Y: 229 
X: 446.95, Y: 233 
X: 445.95, Y: 236 
X: 443.95, Y: 239 
X: 439.95, Y: 244 
X: 435.95, Y: 249 
X: 434.95, Y: 252 
X: 431.95, Y: 255 
X: 427.95, Y: 258 
X: 424.95, Y: 263 
X: 423.95, Y: 265 
X: 421.95, Y: 268 
X: 420.95, Y: 271 
X: 419.95, Y: 273 
X: 417.95, Y: 275 
X: 416.95, Y: 279 
X: 414.95, Y: 280 
X: 413.95, Y: 282 
X: 411.95, Y: 285 
X: 410.95, Y: 287 
X: 408, Y: 289 
X: 406, Y: 290 
X: 405, Y: 292 
X: 404, Y: 292 
X: 403, Y: 293 
X: 402, Y: 293 
X: 401, Y: 294 
X: 399, Y: 295 
X: 398, Y: 295 
X: 397, Y: 297 
X: 395, Y: 298 
X: 393, Y: 298 
X: 392, Y: 299 
X: 388, Y: 300 
X: 386, Y: 302 
X: 383, Y: 302 
X: 382, Y: 303 
X: 380, Y: 303 
X: 378, Y: 303 
X: 376, Y: 304 
X: 374, Y: 304 
X: 373, Y: 304 
X: 370, Y: 304 
X: 368, Y: 304 
X: 367, Y: 304 
X: 364, Y: 304 
X: 362, Y: 304 
X: 360, Y: 304 
X: 359, Y: 303 
X: 356, Y: 303 
X: 353, Y: 302 
X: 350, Y: 301 
X: 348, Y: 299 
X: 345, Y: 299 
X: 340, Y: 297 
X: 338, Y: 296 
X: 336, Y: 295 
X: 333, Y: 294 
X: 330, Y: 293 
X: 327, Y: 291 
X: 326, Y: 291 
X: 323, Y: 291 
X: 321, Y: 290 
X: 319, Y: 288 
X: 316, Y: 288 
X: 313, Y: 287 
X: 310, Y: 287 
X: 308, Y: 287 
X: 305, Y: 287 
X: 304, Y: 287 
X: 302, Y: 286 
X: 301, Y: 286 
X: 299, Y: 285 
X: 298, Y: 285 
X: 296, Y: 285 
X: 293, Y: 284 
X: 292, Y: 284 
X: 289, Y: 284 
X: 284, Y: 284 
X: 283, Y: 284 
X: 280, Y: 284 
X: 277, Y: 283 
X: 275, Y: 282 
X: 273, Y: 282 
X: 272, Y: 282 
X: 269, Y: 282 
X: 268, Y: 282 
X: 265, Y: 282 
X: 264, Y: 282 
X: 261, Y: 282 
X: 259, Y: 282 
X: 256, Y: 282 
X: 253, Y: 282 
X: 250, Y: 282 
X: 245, Y: 282 
X: 242, Y: 282 
X: 240, Y: 282 
X: 238, Y: 282 
X: 236, Y: 282 
X: 234, Y: 282 
X: 232, Y: 283 
X: 230, Y: 283 
X: 229, Y: 283 
X: 228, Y: 283 
X: 227, Y: 283 
X: 225, Y: 284 
X: 224, Y: 284 
X: 222, Y: 284 
X: 220, Y: 284 
X: 218, Y: 284 
X: 216, Y: 285 
X: 214, Y: 285 
X: 211, Y: 285 
X: 209, Y: 285 
X: 207, Y: 285 
X: 204, Y: 285 
X: 203, Y: 285 
X: 202, Y: 285 
X: 201, Y: 286 
X: 200, Y: 286 
X: 200, Y: 287 
X: 198, Y: 287 
X: 197, Y: 287 
X: 194, Y: 287 
X: 192, Y: 287 
X: 189, Y: 287 
X: 186, Y: 287 
X: 183, Y: 287 
X: 181, Y: 287 
X: 179, Y: 287 
X: 176, Y: 287 
X: 174, Y: 287 
X: 173, Y: 287 
X: 172, Y: 287 
X: 171, Y: 287 
X: 169, Y: 287 
X: 166, Y: 287 
X: 162, Y: 287 
X: 159, Y: 287 
X: 158, Y: 287 
X: 156, Y: 287 
X: 155, Y: 287 
X: 154, Y: 287 
66 

正是我想要的:P

2 个答案:

答案 0 :(得分:0)

有效的XML:

<?xml version="1.0"?>
<map name="mapname" description="just a map">
<line s="1" c="" a="100"/>
<line s="6" c="" a="100"/>
<p x="121" y="212"/>
<p x="124" y="208"/>
<p x="128" y="204"/>
...

无效的XML:

<?xml version="1.0"?>
-<map name="mapname" description="just a map">
<line s="1" c="" a="100"/>
,
-<line s="6" c="" a="100">
<p x="121" y="212"/>
<p x="124" y="208"/>
<p x="128" y="204"/>

就解释PHP而言(一旦你有了可以解析的有效输入),就可以完成本教程(其中之一):

http://www.w3schools.com/php/php_xml_simplexml.asp

这并不困难......但 IS 只是比“foreach($ xml-&gt; line-&gt; attributes()”更多的工作,因为$ a =&gt; $ b)“;)

答案 1 :(得分:0)

如果你有PHP5,你纠正了那个XML之后你就可以用SimpleXML把它作为一个对象加载。下面是示例代码,其中包括循环遍历它以获取所需的属性。

价:
http://us.php.net/manual/en/function.simplexml-load-string.php
http://php.net/manual/en/simplexmlelement.attributes.php

$xml = '<?xml version="1.0"?>
<map name="mapname" description="just a map">
<line s="1" c="" a="100"/>
<line s="6" c="" a="100">
<p x="121" y="212"/>
<p x="124" y="208"/>
<p x="128" y="204"/>
<p x="132" y="201"/>
<p x="133" y="199"/>
<p x="137" y="196"/>
<p x="140" y="192"/>
<p x="144" y="187"/>
<p x="148" y="182"/>
<p x="152" y="180"/>
<p x="156" y="175"/>
<p x="157" y="172"/>
<p x="160" y="170"/>
<p x="163" y="167"/>
<p x="165" y="165"/>
<p x="168" y="162"/>
<p x="170" y="160"/>
<p x="173" y="157"/>
<p x="181" y="159"/>
<p x="184" y="164"/>
<p x="184" y="169"/>
<p x="186" y="172"/>
<p x="188" y="177"/>
<p x="188" y="181"/>
<p x="188" y="187"/>
<p x="188" y="190"/>
<p x="188" y="195"/>
<p x="187" y="199"/>
<p x="187" y="205"/>
<p x="187" y="209"/>
<p x="187" y="215"/>
<p x="187" y="218"/>
<p x="187" y="222"/>
<p x="187" y="224"/>
<p x="187" y="225"/>
<p x="187" y="227"/>
<p x="187" y="228"/>
<p x="187" y="229"/>
<p x="187" y="230"/>
</line>
<line s="6" c="" a="100">
<p x="133" y="203"/>
<p x="137" y="203"/>
<p x="143" y="203"/>
<p x="149" y="203"/>
<p x="157" y="203"/>
<p x="161" y="203"/>
<p x="165" y="203"/>
<p x="174" y="203"/>
<p x="177" y="203"/>
<p x="180" y="203"/>
<p x="183" y="203"/>
<p x="184" y="203"/>
<p x="185" y="203"/>
<p x="185" y="204"/>
</line>
</map>
';

$xobj = simplexml_load_string($xml);
print_r($xobj);

foreach ($xobj->line AS $line) {
  foreach ($line->p AS $point) {
    $attributes = $point->attributes();
    $x = $attributes['x'];
    $y = $attributes['y'];
    echo "X: $x, Y: $y\n<br>\n";
  }
}