2010-12-12 4 views
1

Как удалить элемент <title> внутри этой строки XML?Как удалить элемент внутри строки XML?

$input= 
'<items>dfd jdh flkdjf 
<title>My Test Title 
</title>.... 
<store>my store 1</store> 
</items>.....'; 

$output= 
    '<items>dfd jdh flkdjf 
     .... 
    <store>my store 1</store> 
    </items>.....'; 

Благодаря

+2

[ "Вы пробовали с помощью XML-парсера вместо этого?" говорит мудрый человек bobince] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – BoltClock

+0

нормально, как вы это делаете с xmldocument «Его для модульного теста не для производства soo regex может быть хорошим также – Yosef

+0

@BoltClock: Это зависит от XML-документа. – Gumbo

ответ

7

SimpleXml

$str = '<items>1<title>lalala</title><others>...</others></items>'; 
$xml = simplexml_load_string($str); 
unset($xml->children()->title); 
$output = str_replace("<?xml version=\"1.0\"?>\n", '', $xml->asXml()); 
+0

SimpleXML соответствует своему названию, +1 – BoltClock

+0

Спасибо, не работает в реальном случае, потому что элементы названия в другом месте. Я даю только простой пример: – Yosef

+0

исправляется, но вам нужно снова обновить свой вопрос с помощью фактического xml ... для нескольких узлов, вам нужно зациклиться на каждом узле ... – ajreal

2

Если вы работаете с неизвестными входными данными, или с производственным кодом, вы должны использовать парсер.

Если вы работаете в тестовой среде и входные данные известны:

$output = preg_replace('%<title>[^<]*</title>%', '', $input); 

Если вам нужно разрешить для атрибутов тега, я предлагаю использовать реальный XML-анализатор, для максимальной надежности и минимальной вероятности ошибки.

+0

спасибо, но если у названия есть атрибуты? Yosef

+0

Обновлено. Обратите внимание на предостережение. –

+0

Да, его падение в моем реальном коде – Yosef