2016-04-15 5 views
-1

У меня есть файл config.ini образовавшуюся в XML так:Regex: Как удалить стиль тегов XML

<positions> 

    <position> 
     <name>BLOCK TAB 1</name> 
     <tag>[BLOCK_TAB_1]</tag> 
    </position> 


    <position> 
     <name>PERSONALAREA</name> 
     <tag>[PERSONALAREA]</tag> 
    </position> 
</positions> 

Я попытался удалить блок:

<position> 
    <name>BLOCK TAB 1</name> 
    <tag>[BLOCK_TAB_1]</tag> 
</position> 

с помощью preg_replace

$find1 = "/<name>BLOCK TAB 1<\/name>/"; 
$find2 = "/<tag>\[BLOCK_TAB_1\]<\/tag>/"; 

$contents = preg_replace($find1, "", $contents); 
$contents = preg_replace($find2, "", $contents); 

Но содержание будет

<positions> 

    <position> 


    </position> 


    <position> 
     <name>PERSONALAREA</name> 
     <tag>[PERSONALAREA]</tag> 
    </position> 
</positions> 

Пустой знак <position> (с вкладками внутри) все еще здесь.

Попробуйте использовать /<position[^>]*><\\/position[^>]*>/ для замены пустой <position> тег, но из-за вкладок внутри, поэтому замена не работает.

У кого-нибудь есть идея?

+0

" \ п \ s + BLOCK TAB 1 \ п \ s + \ [BLOCK_TAB_1 \] \ п \ s + "'использовать это или" \ п \ s + . * \ п \ s + . * \ п \ s + "' – Ashish

+0

@Ashish Спасибо! Я пробовал, но не повезло. –

ответ

3

You shouldn't use regex для анализа этого XML. В этом примере, вы можете использовать XPath, чтобы легко идентифицировать <name>, который имеет текст "BLOCK TAB 1", затем выберите его родителей и удалить его:

$doc = new DOMDocument; 
$doc->loadXML($xml); 

$xpath = new DOMXpath($doc); 

$positions = $xpath->query('//name[text()="BLOCK TAB 1"]/parent::position'); 

foreach ($positions as $position) { 
    // Remove it 
    $position->parentNode->removeChild($position); 
} 

echo $doc->saveXML(); 

Example

+0

yup, no to regex, это подходящий инструмент для использования – Ghost

+0

Спасибо! У меня небольшая проблема с DOMDocument и simpleXML: мой текст написан на вьетнамском языке, и после синтаксиса он будет выглядеть следующим образом: 'Đ â yl à giao di & # x1EC7; n m & # x1EB7; c đ & # x1ECB; nh c & # x1EE7; h & # x1EC7; '' 'Не –

+0

Вам нужно будет установить соответствующую кодировку при вызове DOMDocument –

Смежные вопросы