Поиск и замена текста из файла yaml с помощью Java

У меня есть XML-файл, содержащий информацию о сервере, на котором развернуто мое приложение.

<?xml version="1.0" encoding="UTF8"?>

<model identifier="id28142c8761fd4649891b346b0573c2e1" xsi:schemaLocation="http://www.opengroup.org/xsd/archimate/3.0/ http://www.opengroup.org/xsd/archimate/3.0/archimate3_Diagram.xsd>
<name>Model package 2</name>
<elements>

<element identifier="id77" xsi:type="CommunicationNetwork">
    <name xml:lang="en">Intra Network</name>
</element>

<element identifier="id78" xsi:type="Device">
    <name xml:lang="en">Operations Laptop p011xxxxxx</name>
</element>

<element identifier="id75" xsi:type="Node">
    <name xml:lang="en">x01133361</name>
</element>

<element identifier="id80" xsi:type="SystemSoftware">
    <name xml:lang="en">Linux OS</name>
</element>

<element identifier="id81" xsi:type="Artifact">
    <name xml:lang="en">Private IP: 10.115.1.8</name>
</element>

</elements>
</model>

Я извлек IP-адрес из XML-файла с помощью Java XPath.

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demo {

    public String s;
    public static void main(String[] args) {
        try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             Document doc = factory.newDocumentBuilder().parse(new File("demo.xml"));

             XPathFactory xFactory = XPathFactory.newInstance();
             XPath xPath = xFactory.newXPath();
             XPathExpression exp = 
             xPath.compile("/model/elements/element/name[contains(translate(text(), 
            'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'private')]");

             NodeList nl = (NodeList)exp.evaluate(doc.getFirstChild(), XPathConstants.NODESET);
             for (int index = 0; index < nl.getLength(); index++) 
             {

                 Node node = nl.item(index);
                 String s = node.getTextContent();
                 String n = s.replace("Private IP: ","");
                 System.out.println(n);
             }            
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

Вывод для этого кода

10.115.1.8

Теперь я хочу отправить этот IP-адрес в файл yaml (желательно в файл gitlab-ci.yml), поскольку мое приложение развертывается с использованием GitLab CI.

Есть ли способ найти строку или текст (существующий IP-адрес) в файле yaml и заменить его новой строкой или текстом (новым IP-адресом)?

Заранее спасибо.

Боковое примечание: XML-файл фактически экспортируется из модели системы ArchiMate. Итак, основная идея всей работы заключается в том, что если новый сервер введен в эксплуатацию, мне просто нужно обновить модель ArchiMate с IP-адресом нового сервера, и GitLab CI развернет приложение на новом сервере.

0 ответов

Другие вопросы по тегам