从XML中的xml数据(通过XML数据搜索)中获取XML元素作为字符串

时间:2016-03-28 14:49:19

标签: php xml simplexml domdocument

我试图从'n'数量的xml元素中获取 11 xml元素。我有11个ID,其中id对于所有xml元素都是唯一的。

我正在使用php

$xml = simplexml_load_string($j[0]); // $j[0] contains 'n' number of xml elements. I need to get 11 xml elements with 11 different ids.

$doc = new DOMDocument();
$doc->loadXML($j[0]);
$players = $doc->getElementsByTagName('player');

我需要解析下面的xml数据($j[0]

<testsquad>
    <team name="team1" abbr="t1" >
        <tplayers>
            <player name="player1" id="1"/>
            <player name="player2" id="2"/>
            <player name="player3" id="3"/>
            <player name="player4" id="4"/>
            <player name="player5" id="5"/>
            <player name="player6" id="6"/>
            <player name="player7" id="7"/>
            <player name="player8" id="8"/>
            <player name="player9" id="9"/>
            <player name="player10" id="10"/>
            <player name="player11" id="11"/>
            <player name="player12" id="12"/>
            <player name="player13" id="13"/>
            <player name="player14" id="14"/>
            <player name="player14" id="14"/>
        </tplayers>
    </team>
</testsquad>

从给定数量为'n'的玩家元素的xml数据中,我只需要获得11个元素。

我对使用php搜索xml数据感到困惑。

当我执行var_dump($doc->loadXML($j[0]));时,我收到以下错误。

  

警告:DOMDocument :: loadXML():作为输入提供的空字符串

我哪里出错了?如果我的问题不明确,请发表评论。

给定的xml数据没有如下所示的标题。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

这是原因,它是说提供空字符串作为输入

2 个答案:

答案 0 :(得分:0)

错误消息表明您为DOMDocument :: loadXml()提供了一个空字符串。实际上验证$j[0]包含XML字符串。

Xpath可用于限制结果:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//tplayers/player[position() <= 3]/@name') as $attribute) {
  var_dump($attribute->value);
}

Output

string(7) "player1"
string(7) "player2"
string(7) "player3"

答案 1 :(得分:0)

我使用了SimpleXMLElementxpath而不是DOMDocument,因此得到了Simple XML Element对象。

查看以下代码。

$player_id_list = array(1,3,5,7,9,11,13,15,17,19,21);
$xml=new SimpleXMLElement($j[0]);
foreach($player_id_list as $new_player_id)
{
    $result = $xml->xpath("team/PlayerDetails/player[@id=".$new_player_id."]");
    echo "<pre>";
    var_dump($result);
    echo "</pre>";
}