簡體   English   中英

php DomDocument —查找空文本節點?

[英]php DomDocument — find empty text node?

看這個非常基本的XML文檔(這只是一個基本示例)

<?xml version="1.0" encoding="UTF-8"?>

<books>
    <book>first title<sep/>first author</book>
    <book>second title<sep/>second author</book>
    <book>third title<sep/>third author</book>
    <book><sep/>fourth author</book>
</books>

問題很簡單...如何插入第四本書的標題?
以及我如何自動檢測未為第四本書設置標題?

我真正需要的是php DOMDocument,告訴我最后一個<sep/>前面有一個空的文本節點。
但是使用DOMDocument,該節點根本不存在:

<?php

$path = './books.xml';

$dom = new DOMDocument();
$dom->load($path);

$books = $dom->getElementsByTagName('book');

foreach ($books as $index => $book) {
    echo $book->childNodes->length . ' children' . PHP_EOL;
}

上面的代碼僅顯示最后一個book節點的2個子節點。

使用Xpath /books/book[4]/text()[1]指向第四本書的“作者”文本節點,而不指向<sep/>前面的空白文本節點

讓我知道這是否還不是很清楚...

在此先感謝您的幫助 !

這並不是在告訴您那里有一個空的文本節點,因為那里沒有文本節點-如此簡單。 選擇該書的xpath表達式為:

/books/book[not(sep/preceding-sibling::text())]

例:

$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>

<books>
    <book>first title<sep/>first author</book>
    <book>second title<sep/>second author</book>
    <book>third title<sep/>third author</book>
    <book><sep/>fourth author</book>
</books>
XML;

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

$query = '/books/book[not(sep/preceding-sibling::text())]';
foreach ($xpath->query($query) as $book) {
    $title = $dom->createTextNode("fourth title");
    $book->insertBefore($title, $book->firstChild);
    echo $dom->saveXML($book), "\n";
}

輸出:

<book>fourth title<sep/>fourth author</book>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM