【问题标题】:How to PHP DOMDocument creating attributes?如何为 PHP DOMDocument 创建属性?
【发布时间】:2013-02-10 02:29:24
【问题描述】:

两天来,我一直在苦苦思索如何让 PHP 对我想要的 XML 进行编码。我尝试了 SimpleXML,发现存在严重的限制,所以对于 现在我正在使用 DOMDocument 来满足我的需求。我的问题很基本,正确的语法是什么?

我正在从数据库中检索代码,然后将其呈现为 xml。 XML 结构必须与我要发布的格式完全相同。问题在于属性。输出具有三个属性,需要以不同的值重复十二次。 我的问题是试图弄清楚如何呈现属性,需要哪些代码。

这是 XML:

    <inits>
<version>18.05.04_EP1</version>
<source>Live</source>
<lowid>265067</lowid>
<highid>265068</highid>
<ql>300</ql>
<name>Ofab Shark Mk 1</name>
<inits slider="DEF&gt;===========][&lt;AGG" percent="100" init="430" />
<inits slider="DEF&gt;==========][=&lt;AGG" percent="90" init="530" />
<inits slider="DEF&gt;=========][==&lt;AGG" percent="81" init="630" />
<inits slider="DEF&gt;========][===&lt;AGG" percent="72" init="730" />
<inits slider="DEF&gt;=======][====&lt;AGG" percent="63" init="830" />
<inits slider="DEF&gt;======][=====&lt;AGG" percent="54" init="930" />
<inits slider="DEF&gt;=====][======&lt;AGG" percent="45" init="1030" />
<inits slider="DEF&gt;====][=======&lt;AGG" percent="36" init="1130" />
<inits slider="DEF&gt;===][========&lt;AGG" percent="27" init="1290" />
<inits slider="DEF&gt;==][=========&lt;AGG" percent="18" init="1590" />
<inits slider="DEF&gt;=][==========&lt;AGG" percent="9" init="1890" />
<inits slider="DEF&gt;][===========&lt;AGG" percent="0" init="2190" />

</inits>

请注意,Inits 包含属性、百分比和 init。在本例中将显示 12 次,这是从数据和 php 计算得出的。 这是我目前使用的代码。注意:我是跳过数据和计算函数,手动填写数据。

    $root = $doc->createElement('inits');
$root = $doc->appendChild($root);

$version = $doc->createElement('version');
$version = $root->appendChild($version);
$versiontext = $doc->createTextNode($patchNum);
$versiontext = $version->appendChild($versiontext);

$source = $doc->createElement('source');
$source = $root->appendChild($source);
$sourcetext = $doc->createTextNode('live');
$sourcetext = $source->appendChild($sourcetext);

$xlowid = $doc->createElement('lowid');
$xlowid = $root->appendChild($xlowid);
$xlowidtext = $doc->createTextNode($lowid);
$xlowidtext = $xlowid->appendChild($xlowidtext);

$xhighid = $doc->createElement('highid');
$xhighid = $root->appendChild($xhighid);
$xhighidtext = $doc->createTextNode($highid);
$xhighidtext = $xhighid->appendChild($xhighidtext);

$xql = $doc->createElement('ql');
$xql = $root->appendChild($xql);
$xqltext = $doc->createTextNode($ql);
$xqltext = $xql->appendChild($xqltext);

我从这里去哪里才能让这 3 个属性起作用,就像上面的 XML 示例一样。 谢谢。

【问题讨论】:

  • 如果您没有得到答案,请改进您的问题。第一次出现严重问题,你没有问你担心什么。你只是幸运地在这里得到了答案。投票结束。
  • 没有什么比从新手那里拿走重获点数更重要的了。第一个问题与 SIMPLEXML 有关。当我意识到这是一个死胡同时,我发布了关于 DOMDocumen 的帖子,这使它成为一个不同的问题,尽管归因于相同的数据。如果我要询问 JSON 数据怎么办?那也会重复吗?我不这么认为,但感谢您的提示。我很高兴找到这个网站。
  • 好吧,您实际上关心的是如何创建滑块字符串。你应该直接问你最具体的问题。这最终与 SimpleXML、DOMDocument 或 JSON 没有太大关系,而是更多关于如何创建这样的字符串以及可能如何计算值 - 当你下次看到这样一个死问题时,编辑原始问题而不是创建一个新问题.

标签: php xml domdocument


【解决方案1】:

要设置属性,请使用$some_node-&gt;setAttribute("name","value")。根据需要对所有属性重复。

另外,请注意,您可以链接函数调用:

$root = $doc->appendChild($doc->createElement('inits'));
$root->appendChild($doc->createElement('version',$patchNum));
$root->appendChild($doc->createElement('source',$sourcetext));
$root->appendChild($doc->createElement('lowid',$lowid));
$root->appendChild($doc->createElement('highid',$highid));
$root->appendChild($doc->createElement('ql',$ql));
for($i=11;$i>=0;$i--) {
    $node = $root->appendChild($doc->createElement('inits'));
    $node->setAttribute("slider","DEF>".str_repeat("=",$i)."][".str_repeat("=",11-$i)."<AGG");
    $node->setAttribute("percent",floor($i/11*100));
    $node->setAttribute("init",$i>3 ? 430+(11-$i)*100 : 1290+(3-$i)*300);
}

【讨论】:

  • 如果属性不存在,它将被创建。 - 也可以链接。 createElement 也允许直接设置值。只是注意到。
  • @hakre 是的。我通常将 DOMDocument 等同于 JavaScript DOM 方法,所以我忘记了。
  • NP,我刚刚发现你很幸运地回答了这个问题,它实际上是重复的,而不是关于 DOMDocument,而只是关于如何为inits 元素属性创建字符串。可悲的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2014-04-06
  • 2018-03-22
  • 2010-12-08
  • 2011-01-15
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多