亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 python/java 生成自定義 xml 文件

使用 python/java 生成自定義 xml 文件

開滿天機 2022-12-27 14:40:19
我有一個清單["010WE" "021WG" "022X" .... "xxx"]我想根據以下模板創建/或覆蓋一個 xml 文件:<?xml version="1.0" encoding="UTF-8"?><sweep runs="1">   <parameter name="Date" type="number" number_type="int" start="2" end="4" step="1">      <parameter name="table" type="list" value_type="java.lang.String" values="010WE 021WG 022X" />   </parameter></sweep>唯一的動態部分是values="010WE 021WG 022X",它是從給定列表中讀取的。欣賞有關如何使用 Python 或 Java 執行此操作的演示。
查看完整描述

3 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

Java 方法。我使用了 JDK 8,它提供了內置的 SAX 解析器。


abc.xml:


<?xml version="1.0" encoding="UTF-8"?>

<sweep runs="1">

   <parameter name="Date" type="number" number_type="int" start="2" end="4" step="1">

      <parameter name="table" type="list" value_type="java.lang.String" values="" />

   </parameter>

</sweep>

Example.java :


import java.io.File;

import java.util.Arrays;

import java.util.List;


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;


import org.w3c.dom.Document;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;


public class Example {


    public static void main(String[] args)

            throws ParserConfigurationException, SAXException, TransformerException {

        List<String> values = Arrays.asList("010WE", "021WG", "022X");

        // Read xml

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

        File file = new File("D:/abc.xml");

        Document document = documentBuilder.parse(file);

        NodeList list = document.getElementsByTagName("parameter");

        for (int i = 0; i < list.getLength(); i++) {

            Node node = list.item(i);

            NamedNodeMap map = node.getAttributes();

            if (map.getNamedItem("name").getNodeValue().equalsIgnoreCase("table")) {

                map.getNamedItem("values").setNodeValue(

                        values.toString().replace(",", "").replaceAll("\\s+", " ").replace("[", "").replace("]", ""));

            }


        }

        // modify xml by overwriting it.

        TransformerFactory tf = TransformerFactory.newInstance();

        Transformer transformer = tf.newTransformer();

        document.setXmlStandalone(true);

        DOMSource source = new DOMSource(document);

        StreamResult result = new StreamResult(file);

        transformer.transform(source,result);

    }


}

修改后的 abc.xml :


<?xml version="1.0" encoding="UTF-8"?>

<sweep runs="1">

   <parameter end="4" name="Date" number_type="int" start="2" step="1" type="number">

      <parameter name="table" type="list" value_type="java.lang.String" values="010WE 021WG 022X"/>

   </parameter>

</sweep>


查看完整回答
反對 回復 2022-12-27
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

以下


XML_TEMPLATE = '''    

<?xml version="1.0" encoding="UTF-8"?>

<sweep runs="1">

   <parameter name="Date" type="number" number_type="int" start="2" end="4" step="1">

      <parameter name="table" type="list" value_type="java.lang.String" values="{}" />

   </parameter>

</sweep> '''


values = ['a','b','c']


xml = XML_TEMPLATE.format(' '.join(values))

print(xml)


查看完整回答
反對 回復 2022-12-27
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

解決方案:


此python腳本將在項目的根目錄中生成一個 example.xml:


import xml.etree.ElementTree as ET



def prettify(element, indent='  '):

    queue = [(0, element)]  # (level, element)

    while queue:

        level, element = queue.pop(0)

        children = [(level + 1, child) for child in list(element)]

        if children:

            element.text = '\n' + indent * (level+1)  # for child open

        if queue:

            element.tail = '\n' + indent * queue[0][0]  # for sibling open

        else:

            element.tail = '\n' + indent * (level-1)  # for parent close

        queue[0:0] = children  # prepend so children come before siblings



def create_xml(input_list):

    xml_doc = ET.Element('sweep', runs='1')

    parameter = ET.SubElement(xml_doc, 'parameter', name='Date', type='number', number_type='int', start='2', end='4', step='1')

    ET.SubElement(parameter, 'parameter', name='table', type='list', value_type='java.lang.String', values=' '.join(input_list))

    prettify(xml_doc)

    tree = ET.ElementTree(xml_doc)

    tree.write('example.xml', encoding='UTF-8', xml_declaration=True)



def main():

    some_list = ['010WE', '021WG', '022X']

    create_xml(some_list)



if __name__ == '__main__':

    main()

基于帖子的答案:Pretty printing XML in Python


查看完整回答
反對 回復 2022-12-27
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號