我有以下XML:
<root>
<level name="level1">
<!-- More children <level> -->
</level>
<level name="level2">
<!-- Some more children <level> -->
</level>
</root>
如何直接在<level>
下提取<root>
,以便相对于提取的$xml->xpath('//some-query')
运行XPath查询,例如<level>
?
参考方案
DOMXPath::query的第二个参数是上下文节点。只需传递您先前“找到”的DOMNode实例,查询就可以“相对”运行到该节点。例如。
<?php
$doc = new DOMDocument;
$doc->loadxml( data() );
$xpath = new DOMXPath($doc);
$nset = $xpath->query('/root/level[@name="level1"]');
if ( $nset->length < 1 ) {
die('....no such element');
}
else {
$elLevel = $nset->item(0);
foreach( $xpath->query('c', $elLevel) as $elC) {
echo $elC->nodeValue, "\r\n";
}
}
function data() {
return <<< eox
<root>
<level name="level1">
<c>C1</c>
<a>A</a>
<c>C2</c>
<b>B</b>
<c>C3</c>
</level>
<level name="level2">
<!-- Some more children <level> -->
</level>
</root>
eox;
}
但是除非您必须执行多个单独的(可能是复杂的)后续查询,否则很有可能没有必要
<?php
$doc = new DOMDocument;
$doc->loadxml( data() );
$xpath = new DOMXPath($doc);
foreach( $xpath->query('/root/level[@name="level1"]/c') as $c ) {
echo $c->nodeValue, "\r\n";
}
function data() {
return <<< eox
<root>
<level name="level1">
<c>C1</c>
<a>A</a>
<c>C2</c>
<b>B</b>
<c>C3</c>
</level>
<level name="level2">
<c>Ahh</c>
<a>ouch</a>
<c>no</c>
<b>wrxl</b>
</level>
</root>
eox;
}
仅使用一个查询就具有相同的输出。
Div单击与单选按钮相同吗? - php有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date…
使用Ajax呈现html表 - php我想知道如何实现以下项目其实我有一个php代码,可以渲染一张桌子<table id = "oldata" class ="table table-bordered"> <thead> <tr class ="success"> <th class="…
提交表单后显示模式对话框 - php提交下载文件后,我有一张表格。我要自动而不是自动下载文件..以显示模态对话框并显示下载链接。<form name="softwareform" id="softwareform" action="../downloadlink.php" method="POST" alig…
在联系表单7生成的html内添加html元素 - php我们正在使用Contact Form 7插件,并希望在Contact Form 7生成的html代码中引入一个附加元素(斜体(i))。联系表格7短标签:[checkbox* areas_checkbox id:ftype_box class:checkbox use_label_element "Option1" "Option…
如何使用jquery获取文本字段的val? - php码:<script> $(document).ready(function(){ $(".comments").keyup(function(){ id = this.id; comment = $("#com"+id).val(); alert(comment); }); }); </script&…