当前位置: 首页 > 面试题库 >

将while循环生成的xml分配给变量

史同化
2023-03-14
问题内容

我正在使用while循环创建XML,但是现在我需要在生成的XML之前加上XML标头信息和包装器标签,但我正努力使其正常工作,这是我的代码,

$result = mysql_query("SELECT * FROM users")
or die(mysql_error());

$row = mysql_fetch_array($result);

    while ($row = mysql_fetch_array($result)) {
        $pumaXML  = "<userDetails>";
        $pumaXML .= "<userID>".$row['uid']."</userID>";
        $pumaXML .= "<userName>".$row['userName']."</userName>";
        $pumaXML .= "<points>".$row['points']."</points>";
        $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>";
        $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>";
        $pumaXML .= "</userDetails>";
    };

我似乎找不到解决方法,我也尝试制作一个函数,但是效果并不理想,这里是代码,

function createXML($result) {
    while ($row = mysql_fetch_array($result)) {
        $pumaXML  = "<userDetails>";
        $pumaXML .= "<userID>".$row['uid']."</userID>";
        $pumaXML .= "<userName>".$row['userName']."</userName>";
        $pumaXML .= "<points>".$row['points']."</points>";
        $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>";
        $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>";
        $pumaXML .= "</userDetails>";
    };
    return $pumaXML;
};

提前感谢!


问题答案:

这是使用DOM的方法:

function createUserDetailsXml(array $result) {

    $dom  = new DOMDocument;
    $dom->formatOutput = TRUE; // enable automatic indenting
    $dom->loadXML('<users/>'); // set root node

    foreach($result as $row) {

        // create user-details node
        $user = $dom->createElement('user-details');

        // create and append details to user-details node
        $user->appendChild(
            $dom->createElement('user-id', $row['uid']));
        $user->appendChild(
            $dom->createElement('user-name', $row['userName']));
        $user->appendChild(
            $dom->createElement('user-points', $row['points']));
        $user->appendChild(
            $dom->createElement('image-url', $row['imageURL']));
        $user->appendChild(
            $dom->createElement('thumb-url', $row['thumbURL']));

        // add user-details node to XML document, e.g. users node
        $dom->documentElement->appendChild($user);
    };
    return $dom->saveXML(); // returns the formatted XML
};

请注意,该函数希望您传递完整的结果数组,因此我可以使用以下方法进行测试:

$result = array(
    array(
        'uid'      => 1,
        'userName' => 'Gordon',
        'points'   => PHP_INT_MAX,
        'imageURL' => 'http://example.com/gordon.jpg',
        'thumbURL' => 'http://example.com/t_gordon.jpg'
    ),
    array(
        'uid'      => 2,
        'userName' => 'John <blink>"Frigging"</blink> Doe',
        'points'   => 0,
        'imageURL' => 'http://example.com/johndoe.jpg',
        'thumbURL' => 'http://example.com/t_johndoe.jpg'
    )
);
echo createUserDetailsXml($result);

该函数将返回

<?xml version="1.0"?>
<users>
  <user-details>
    <user-id>1</user-id>
    <user-name>Gordon</user-name>
    <user-points>2147483647</user-points>
    <image-url>http://example.com/gordon.jpg</image-url>
    <thumb-url>http://example.com/t_gordon.jpg</thumb-url>
  </user-details>
  <user-details>
    <user-id>2</user-id>
    <user-name>John &lt;blink&gt;"Frigging"&lt;/blink&gt; Doe</user-name>
    <user-points>0</user-points>
    <image-url>http://example.com/johndoe.jpg</image-url>
    <thumb-url>http://example.com/t_johndoe.jpg</thumb-url>
  </user-details>
</users>

请注意,DOM自动为您转义了John Doe名称中的特殊字符。DOM还将确保XML元素名称(或属性,如果使用它们)在语法上是有效的。它还添加了XML
Prolog。



 类似资料:
  • 问题内容: 我刚刚遇到了这段代码 并且认为, 必须 有一个比用无限循环更好的方法。 所以我尝试了: 显然有一个错误。 有什么方法可以避免在那种情况下使用? 编辑: 理想情况下,您要避免重复说两次…恕我直言,重复甚至比a还要糟糕,尤其是在语句很复杂的情况下。 问题答案: 如果您不对数据做任何奇特的事情,例如以后再阅读更多行,总会有:

  • 问题内容: 上面给我一个错误,即“一个”不存在。不能以这种方式分配吗?我想为列表中的每个var分配一个递增编号。 问题答案: Python变量是值的 名称 。他们并没有真正“包含”这些价值观。 导致“ var”成为列表中每个元素的名称。在循环内,它不会影响列表:相反,它将导致不再是list元素的名称,而是开始成为当前名称的名称。 同样,当你创建列表,如果,而不是已经为值的名字,那么你可以不使用它们

  • 问题内容: 在C语言中, 但是在Python中,似乎没有。 产生 ( 应该在上) 有解决方法吗? 问题答案: 使用中断:

  • 我是helm的新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。 我为每个环境(其中

  • loop变量等同于具有真值的while循环( while true )。 这个循环中的语句将重复执行,直到我们使用break语句退出循环。 语法 (Syntax) 下面给出了CoffeeScript中while循环的循环替代语法。 loop statements to be executed repeatedly condition to exit the loop 例子 (Exam

  • 只要给定条件为真,Perl编程语言中的while循环语句就会重复执行目标语句。 语法 (Syntax) Perl编程语言中while循环的语法是 - while(condition) { statement(s); } 这里的statement(s)可以是单个陈述或一个陈述块。 condition可以是任何表达。 当条件为真时,循环迭代。 当条件变为假时,程序控制将立即传递到循环之后的行。