从xml中获取城市 省份名称
更新时间:2024-01-04
段落一:
获取城市和省份名称这个需求,一般可以采用XPath语法来实现。对于XML文档,我们可以使用PHP内置的SimpleXMLElement类来进行解析。下面是一个示例XML文档:
<?xml version="1.0" encoding="UTF-8"?>要从这样的XML文档中获取城市和省份名称,我们可以使用以下代码:广州 深圳 珠海 北京市
PHP代码:
$xml = simplexml_load_file('xml_demo.xml'); $provinces = $xml->xpath('/root/province'); foreach ($provinces as $province) { $province_name = (string) $province['name']; $cities = $province->city; foreach ($cities as $city) { $city_name = (string) $city; echo "省份:{$province_name},城市:{$city_name}\n"; } }解析XML文档的过程很简单,首先使用simplexml_load_file函数将XML文档加载为SimpleXMLElement对象,然后使用xpath方法查询所有的province节点。接下来,使用foreach遍历所有的province节点,获取省份名称和其下属的城市节点。使用foreach遍历城市节点,获取城市名称。 段落二: 如果使用DOMDocument类来解析XML文档,则可以使用getElementsByTagName方法来获取相应的节点,并使用getAttribute和nodeValue方法来获取节点的属性和文本值。同样以上面的XML文档为例,以下是一个基于DOMDocument的示例代码:
PHP代码:
$doc = new DOMDocument(); $doc->load('xml_demo.xml'); $provinces = $doc->getElementsByTagName('province'); foreach ($provinces as $province) { $province_name = $province->getAttribute('name'); $cities = $province->getElementsByTagName('city'); foreach ($cities as $city) { $city_name = $city->nodeValue; echo "省份:{$province_name},城市:{$city_name}\n"; } }这段代码与上面的代码类似,只是使用了不同的解析方式。使用DOMDocument类首先需要创建一个DOMDocument对象,然后使用load方法加载XML文档。接下来,使用getElementsByTagName方法获取所有的province节点,使用getAttribute方法获取name属性,使用getElementsByTagName方法获取所有的city节点,使用nodeValue方法获取文本值。 段落三: 除了使用PHP内置的类来解析XML文档,我们还可以使用第三方类库,例如SimpleXMLIterator、XmlReader、XMLWriter等。下面是一个使用SimpleXMLIterator类的示例代码:
PHP代码:
$xml = new SimpleXMLIterator('xml_demo.xml', 0, true); foreach ($xml as $province) { $province_name = (string) $province['name']; foreach ($province as $city) { $city_name = (string) $city; echo "省份:{$province_name},城市:{$city_name}\n"; } }SimpleXMLIterator类继承自SimpleXMLElement类,可以像遍历数组一样遍历XML文档。在这个例子中,我们使用SimpleXMLIterator类读取XML文档,并直接使用foreach遍历所有的province节点和city节点。使用(string)强制转换为字符串类型,以便输出。 段落四: 在实际开发中,我们可能需要从数据库中获取数据,然后生成XML文档返回给客户端。为了实现这个需求,我们可以使用PHP内置的XMLWriter类。以下是一个简单的示例代码:
PHP代码:
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); $stmt = $pdo->query('SELECT * FROM cities'); $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement('root'); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $xml->startElement('city'); $xml->writeAttribute('id', $row['id']); $xml->writeElement('name', $row['name']); $xml->endElement(); } $xml->endElement(); header('Content-Type: application/xml'); echo $xml->outputMemory(true);在这个例子中,我们使用PDO类从数据库中获取数据,然后使用XMLWriter类生成XML文档。使用openMemory方法创建一个XMLWriter对象,并使用startDocument方法开始文档。接下来,使用startElement方法开始一个city节点,并使用writeAttribute方法设置id属性,使用writeElement方法设置name子元素。使用endElement方法结束city节点和root节点。最后,设置响应头为application/xml,输出XML文档字符串。