Строка JavaScript заменяет второе вхождение в XML - PullRequest
0 голосов
/ 05 ноября 2019

Привет, у меня есть следующий xml:

<?xml version="1.0" encoding="UTF-8"?>
    <library>
    <item>
    <books> 
        <?xml version="1.0" encoding="UTF-8"?>
            &lt;Fiction&gt;
            &lt;tt:Author&gt;A&lt;/tt:Author&gt;
            &lt;tt:BookName&gt;45&lt;/tt:BookName&gt;
            &lt;/Fiction&gt;
    </books>
    </item>
    </library>

Я хочу в основном заменить второе вхождение всего тега xml пустым пространством. Поэтому в основном замените строку <?xml version="1.0" encoding="UTF-8"?>, которая появляется после открывающего тега <books>, пробелом.

Есть предложения? Я пробовал другие ссылки, но не смог получить рабочее решение. Проблема в том, что между тегом xml и функцией замены строк стоит ", ? and >, учитывая, что это символ escape-последовательности.

Это то, что я пробовал:

var stringToReplace = '<?xml version="1.0" encoding="UTF-8"?>';
   var string = data.string;
   //console.log(string);
    var t=0;   
    var text = string.replace(/stringToReplace/g, function (match) {
    t++;

    return (t === 2) ? "Not found" : match;
    });
console.log(text);

Вышепо-прежнему печатает оба xml-тега

1 Ответ

0 голосов
/ 05 ноября 2019

Предполагая, что ваш XML всегда выглядит так, вы можете использовать обычные методы String, чтобы найти последнее вхождение строки и удалить ее, создав подстроки XML вокруг нее:

 const xml = `<?xml version="1.0" encoding="UTF-8"?>
    <library>
    <item>
    <books> 
        <?xml version="1.0" encoding="UTF-8"?>
            &lt;Fiction&gt;
            &lt;tt:Author&gt;A&lt;/tt:Author&gt;
            &lt;tt:BookName&gt;45&lt;/tt:BookName&gt;
            &lt;/Fiction&gt;
    </books>
    </item>
    </library>`;
const strToReplace = '<?xml version="1.0" encoding="UTF-8"?>';
const index = xml.lastIndexOf(strToReplace);

// The new left- and right-sides of the string will omit the strToReplace
const newXml = xml.substring(0, index) + xml.substring(index + strToReplace.length);
console.log(newXml);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...