我已经创建了一个XML文档。
所以,现在,我想找到好的节点并设置这个节点的值,但在对这个主题进行任何研究后,我不知道该怎么做。
这是我的文件:
<?xml version="1.0" encoding="utf-8"?>
<scripts>
<script nom="myTools.class.php">
<titre>Useful php classes</titre>
<date>18/07/2011</date>
<options>
<option name="topic">Tutorials</option>
<option name="desc">Tutorial for you</option>
</options>
</script>
<script nom="index.php">
<titre>blabla</titre>
<date>15/07/2011</date>
<options>
<option name="topic">The homepage</option>
</options>
</script>
</scripts
&GT;
所以,我想用这些值构建一个html表单,但此时此刻,我无法得到并设置我想要的内容:(
我想获得第一个“脚本”节点:
<script nom="myTools.class.php"> //How to set the "nom" attribute ?
<titre>Useful php classes</titre> //How to get this value and set it ?
<date>18/07/2011</date>
<options>
<option name="topic">Tutorials</option>
<option name="desc">Tutorial for you</option>
</options>
</script>
循环所有文档没有问题,但只有我自己的选择
有你的想法吗?
答案 0 :(得分:0)
XPath是这样做的一种方式:
$dom = new DOMDocument();
$dom->loadXML(... your xml here ...);
$xp = new DOMXPath($dom);
$results = $xp->query('//script[@nom='myTools.class.php']/titre');
$old_title = $results[0]->nodeValue;
$results[0]->nodeValue = 'New title here';
答案 1 :(得分:0)
使用XPath 首先得到dom文件
$dom=new DOMDocument();
$dom->loadXML('file'); // file is the name of XML file if u have a string of XML called $string then use $dom->loadXML($string)
$xpath=new DOMXPath($dom);
$path='//scripts/script[1]'; // that would get the first node
$elem=$xpath->query($path);
现在$ elem[0]
是您的第一个脚本节点
如果您想按属性获取元素,请使用$path='//scripts/script[@nom='attribute value']';
现在使用此路径将返回一个节点集,其中脚本元素的nom属性为ur给定值
你可以在这里看到更多
回应bahamut100
的评论
选项元素的xpath是//options/option
现在,如果您的意思是按属性值获取选项节点,那么执行此操作
$path='//options/option[@attrib_name=attrib_value]';
$elem=$xpath->query($path);
但如果你的意思是获取节点的属性,那么首先你必须到达那个节点。在你的情况下,你必须首先到达选项节点
$path='//options/option';
$option=$xpath->query($path);
现在$option
是一个节点列表
因此,要获得第一个元素的属性,请使用
$attribute=$option[0]->attributes;
现在$ attribute是一个NamedNodeMap,所以要获取第一个属性的值
$value=$attribute->item(0);