Как я могу заменить все числа в скобках определенного типа (во всем документе) числами, которые являются частью их значения?
Моя проблема - это то, что я не смог решить после нескольких дней тщетных поисков. Я очень плохо знаком с XML или любым другим видом программирования, поэтому прошу прощения за любые ошибки, которые я делаю, объясняя!
По сути, как сказано в заголовке, мне нужно заменить все числа в скобках
Scale_Factor >
быть на треть от их первоначальной стоимости. Как в notepad++, редакторе XML или любых других программах, с которыми вы можете быть знакомы, я могу это сделать? Есть ли на самом деле способ? Вся помощь очень ценится! Пример чисел 3.0. Я хочу изменить его на 1,0. Числа меняются по всему документу. XML версия 1.0
2 ответа
Это простая проблема, но ее трудно решить, если вы не знаете, как писать код. Вот самое простое решение для вашей проблемы.
Создайте файл Div.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
и откройте файл div.xsl, который вы только что создали. Тада!
Есть много решений этой проблемы. Это решение сделано через XSLT и XPath. Посмотрите на это и это для получения дополнительной информации.
Ну, сопоставить цифры не так уж сложно. Вам просто нужно использовать поиск по регулярному выражению и сделать что-то вроде этого:
\<Scale_Factor\>([A-Za-z\.\s]*)([d]+)([A-Za-z\.\s]*)\<\/Scale_Factor\>
Соответствие этому регулярному выражению позволит вам заменить все числа, если вы замените его на что-то вроде этого: \1 (что-то, чтобы заменить числа) \3
Тем не менее, вы не можете заниматься математикой в выражениях замены, так что вам не повезло здесь. Лучше всего было бы просто заменить числа итеративными командами замены или написать собственный исполняемый файл, который сделает это за вас.