首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法读取XML文件的PHP子节点

无法读取XML文件的PHP子节点
EN

Stack Overflow用户
提问于 2021-03-01 14:45:45
回答 1查看 26关注 0票数 0

我使用PHP读取一个XML文件,如下所示:

代码语言:javascript
运行
复制
$this->dom->loadHTML('<?xml encoding="UTF-8">' . $strbody );
$xp = new \DOMXPath($this->dom);

foreach( $xp->query('//div | //ul | //ol') as $node) {
    array_push($nodes, $node);
}
// Further processing of the individual elements.
// "2 loop".
foreach( $nodes as $node) 
{
    echo "node: " . print_r($node, true) . PHP_EOL;  
}

通过2循环,我想访问子揉.

在此节点上,我可以通过以下方式输出属性:

代码语言:javascript
运行
复制
foreach ( $node->attributes as $nodeValue )
{
    echo "attributes: ".print_r($nodeValue, true).PHP_EOL;
}

或者我也可以打印出子节点:

代码语言:javascript
运行
复制
foreach ( $node->childNodes as $nodeValue )
{
    echo "childNodes: ".print_r($nodeValue, true).PHP_EOL;
}

但是我如何访问子节点呢?

以下是XML文件的结构:

代码语言:javascript
运行
复制
<startxml system="https://bspurl.de" sprache="DE">
    <inhalt bez="body" sprache="DE">
            <objekt type="xhtml">
                </div class="text">
                    sadf gfew
                </div>
                <div class="h2">Überschrift</div>
                    <div class="text">
                        <span class="bold">Weitere Infos:</span>
                    </div>
                </div class="text">
                    asf 43 rfedv34asd
                </div>
            </objekt>
        </inhalt>    
</startxml>

我需要访问 span (< span class=“粗体”>Weitere Infos:< /span >)元素,如何访问?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-01 15:54:39

DOMXpath::evaluate()/query()的第二个参数是XPath表达式的上下文节点。因此,您可以相对于当前节点寻址节点。

DOMNode::$textContent返回节点的文本内容,包括其后代节点。

代码语言:javascript
运行
复制
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<startxml system="https://bspurl.de" sprache="DE">
    <inhalt bez="body" sprache="DE">
        <objekt type="xhtml">
            <div class="text">before</div>
            <div class="h2">Überschrift</div>
            <div class="text">
                <span class="bold">Weitere Infos:</span>
            </div>
            <div class="text">after</div>
        </objekt>
    </inhalt>    
</startxml>
XML;

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMxpath($document);

foreach ($xpath->evaluate('//div') as $div) {
    var_dump('DIV: ', $div->textContent);
    foreach ($xpath->evaluate('.//span[@class="bold"]', $div) as $span) {
        var_dump('SPAN:', $span->textContent);
    }
}

DOMxpath::evaluate()可以返回标量值。这允许在Xpath中转换值:

代码语言:javascript
运行
复制
foreach ($xpath->evaluate('//objekt[@type="xhtml"]') as $objekt) {
        var_dump(
            $xpath->evaluate(
                'string(.//div[@class="h2"]/following-sibling::*//span[@class="bold"])', 
                $objekt
            )
        );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66424210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档