xml和php获取带有特定元素和输出的标记元素

时间:2012-03-22 19:24:14

标签: php xml

我有两个xml文件..我首先得到一个并循环遍历它然后我需要从第一个xml文件中取一个id并在第二个中找到它并回显出与该id相关的结果。如果我用SQL做到这一点,我会这样做:

$query = (SELECT * FROM HotelSummary WHERE roomTypeCode = '$id') or die();
while($row=mysql_fetch_array($query)){
   $name = $row['Name'];
}
echo $name;

我怎么能这样做是在xml和php ??

3 个答案:

答案 0 :(得分:2)

我建议你阅读DOMDocument documentation。 它很重,但也很强大(并不总是清楚会发生什么,但互联网会给你一个解决方案)

您只需浏览第一个文档,找到您的ID,然后通过XPath找到您的DOMElement。

<?php
$dom = new DOMDocument();
$dom->load('1.xml');

foreach ($dom->getElementsByTagName('article') as $node) {
    // your conditions to find out the id
    $id = $node->getAttribute('id');
}


$dom = new DOMDocument();
$dom->load('2.xml');

$xpath = new DOMXPath($dom);
$element = $xpath->query("//*[@id='".$id."']")->item(0);

// would echo "top_2" based on my example files
echo $element->getAttribute('name');

基于以下测试文件:

1.XML

<?xml version="1.0" encoding="UTF-8"?>
<articles>
    <article id="foo_1">
        <title>abc</title>
    </article>
    <article id="foo_2">
        <title>def</title>
    </article>
</articles>

2.XML

<?xml version="1.0" encoding="UTF-8"?>
<tests>
    <test id="foo_1" name="top_1">

    </test>
    <test id="foo_2" name="top_2">

    </test>
</tests>

答案 1 :(得分:1)

使用SimpleXML创建文件的对象表示。然后,您可以遍历Simple XML对象的元素。

答案 2 :(得分:1)

取决于XML文件的格式:

假设它是:

<xml>
    <roomTypeCode>
        <stuff>stuff</stuff>
        <name>Skunkman</name>
    </roomTypeCode>
    <roomTypeCode>
        <stuff>other stuff</stuff>
        <name>Someone Else</name>
    </roomTypeCode>
</xml>

这将是这样的:

$xml = simplexml_load_file('xmlfile.xml');
for($i = 0; $i < count($xml->roomTypeCode); $i++)
{
    if($xml->roomTypeCode[$i]->stuff == "stuff")
    {
        $name = $xml->roomTypeCode[$i]->name;
    }
}

连接到XML文件,查找有多少个roomTypeCode条目,在其中搜索“stuff”的值以及何时正确匹配它,您可以访问与该XML条目有关的任何内容。