[英]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.