Herhangi xml etiketleri öznitelik eklemek için Regexp

2 Cevap php

Ben dize değişkenleri içine xml belgeleri iyi oluşturmuşlardır. Her xml etiketleri tanımlı bir özniteliği eklemek için preg_replace kullanmak istiyorum.

Örneğin değiştirin:

<tag1>
<tag2> some text </tag2>
</tag1>

by:

<tag1 attr="myAttr">
<tag2 attr="myAttr"> some text </tag2>
</tag1>

Yani temelde herhangi bir başlangıç ​​etiketleri bulmak ve benim niteliğini eklemek için regex ifadesini gerekir, ama ben tam bir regex çaylak değilim.

2 Cevap

Xml üzerinde çalışmak için düzenli ifadeler kullanmayın. Xml düzenli bir dil değildir. Yerine xml extensions of php kullanın:

$xml = new SimpleXml(file_get_contents($xmlFile));
function process_recursive($xmlNode) {
    $xmlNode->addAttribute('attr', 'myAttr');
    foreach ($xmlNode->children() as $childNode) {
        process_recursive($childNode);
    }
}
process_recursive($xml);
echo $xml->asXML();

Düzenli ifadeler içeren tüm cevaplar, örneğin, bu geçerli xml kıracak:

<?xml version="1.0" encoding='UTF-8'?>
<html>
    <head>
        <!-- <meta> ... </meta> -->
        <script>//<![CDATA[
            function load() {document.write('<tt>Test</tt>');}
        //]]></script>
        <title><![CDATA[Fancy <<SiteName>> [with Breadcrumbs] > in > title]]></title>
    </head>
    <body onload="load()">
        <input
            type="submit"
            value="multiline
                   button
                   text"
        />
    </body>
</html>

Tamam, bu satırları okuyan ve bazı nedenlerle regex şekilde kullanarak konusunda hala ilgilenen olanlar için, burada bunu yapmak için nasıl:

$xml_data= preg_replace('/(<[A-Za-z0-9\-\_]+[^>]*)>/u','\1 attr="myAttr">',$xmlData);

But, as discussed earlier, use that one with caution! Use it only on XML source that you know won't be broken (see soulmerge post about that)