Как я могу заменить все числа в определенном типе круглых скобок (по всему документу) номерами, которые являются частью их значения?

77
6

моя проблема - это то, что я не смог решить после нескольких дней бесполезного поиска. Я очень новичок в XML или любом другом программировании, поэтому извиняюсь за любые ошибки, которые я объясняю!


По существу, как сказано в названии, мне нужно заменить все числа в круглых скобках


< Scale_Factor > </Scale_Factor >



чтобы быть третьим от их первоначального значения. Как я могу сделать это, в блокноте ++, редакторе XML или каких-либо других программах, с которыми вы знакомы?
Есть ли способ? Вся помощь очень ценится!
Пример чисел - 3.0. Я хочу изменить его на 1.0. Номера различаются по всему документу.
XML версия 1.0

спросил(а) 2021-01-25T22:09:07+03:00 5 месяцев назад
1
Решение
132

Это простая проблема, но это трудно сделать, если вы не знаете, как закодировать. Вот простейшее решение, специфичное для вашей проблемы.


Создайте файл с именем divide.xsl и поместите в него следующие данные:


<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Scale_Factor">
<xsl:copy>
<xsl:value-of select="text() div 3" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

Использование Notepad ++ с установленным плагином xmltools. Откройте xml файл, перейдите в Plugins >> XML Tools >> XSL Transformation и откройте созданный divide.xsl. Тада!


Существует много решений этой проблемы. Это решение выполняется через XSLT и XPath. Посмотрите этот и этот для получения дополнительной информации.

ответил(а) 2021-01-25T22:09:07+03:00 5 месяцев назад
45

Ну, совпадение чисел не слишком сложно. Вам просто нужно будет использовать поиск регулярных выражений и сделать что-то вроде этого:


\<Scale_Factor\>([A-Za-z\.\s]*)([d]+)([A-Za-z\.\s]*)\<\/Scale_Factor\>

Соответствие этому регулярному выражению позволит вам заменить все числа, если вы замените его на что-то вроде этого:
\ 1 (что-то заменить nums)\3


Однако вам не разрешается выполнять математику в операторах замещения, поэтому вам здесь не повезло. Лучше всего было бы просто заменить цифры итеративными командами замены или написать пользовательский exe, чтобы сделать это за вас.

ответил(а) 2021-01-25T22:09:07+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема