You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为DOMDocument XML的每个元素添加引号并存入MySQL数据库

嘿,别担心英语的问题,完全懂你的需求!你现在已经能把XML里的元素存入MySQL了,就差给每个元素值加上双引号对吧?下面给你几个实用的解决方案,看哪种更适合你的场景:

方法1:在读取XML的代码里直接加双引号

假设你用Python处理(其他语言逻辑类似),可以在提取元素文本的时候,直接把文本用双引号包裹起来——记得先去掉文本前后多余的空格哦:

import xml.etree.ElementTree as ET
import mysql.connector

# 解析你的XML文件
tree = ET.parse('tu_archivo.xml')
root = tree.getroot()

# 连接MySQL数据库(替换成你的配置)
conn = mysql.connector.connect(
    host='localhost',
    user='tu_usuario',
    password='tu_contraseña',
    database='tu_base_datos'
)
cursor = conn.cursor()

# 处理<encabezado>部分
fecha_reporte = f'"{root.find("encabezado/fecha_reporte").text.strip()}"'
fecha_esperada = f'"{root.find("encabezado/fecha_esperada").text.strip()}"'
# 插入数据(根据你的表结构调整字段和表名)
cursor.execute(
    "INSERT INTO encabezado (fecha_reporte, fecha_esperada) VALUES (%s, %s)",
    (fecha_reporte, fecha_esperada)
)

# 处理<detalle>部分(如果有多个detalle节点就用循环)
for detalle in root.findall("detalle"):
    matricula = f'"{detalle.find("matricula").text.strip()}"'
    nombre = f'"{detalle.find("nombre").text.strip()}"'
    creditos_costo = f'"{detalle.find("creditos_costo").text.strip()}"'
    creditos_cursar = f'"{detalle.find("creditos_cursar").text.strip()}"'
    creditos_monto = f'"{detalle.find("creditos_monto").text.strip()}"'
    
    cursor.execute(
        "INSERT INTO detalle (matricula, nombre, creditos_costo, creditos_cursar, creditos_monto) VALUES (%s, %s, %s, %s, %s)",
        (matricula, nombre, creditos_costo, creditos_cursar, creditos_monto)
    )

# 提交更改并关闭连接
conn.commit()
cursor.close()
conn.close()

方法2:用XSLT预先转换XML

如果你想先把整个XML里的元素值都加上双引号,再用原来的流程存入数据库,可以用XSLT做一次转换:

先创建一个转换模板文件add_quotes.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
    
    <!-- 处理所有文本节点:去掉空格+加双引号 -->
    <xsl:template match="text()">
        <xsl:text>"</xsl:text>
        <xsl:value-of select="normalize-space(.)"/>
        <xsl:text>"</xsl:text>
    </xsl:template>
    
    <!-- 保留原XML的所有标签结构 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

然后用命令行工具xsltproc执行转换(也可以用其他支持XSLT的工具):

xsltproc add_quotes.xsl tu_archivo.xml > xml_con_comillas.xml

转换后的XML里,每个元素的文本都会变成带双引号的样子,比如:

<fecha_reporte>"2017-01-31"</fecha_reporte>

之后你直接用这个转换后的XML去存入MySQL就可以了,不用改原来的代码。

方法3:在MySQL插入语句里拼接双引号

如果不想修改读取XML的逻辑,也可以在写INSERT语句的时候,用MySQL的CONCAT函数给值加上双引号:

比如插入<encabezado>的语句可以写成这样:

INSERT INTO encabezado (fecha_reporte, fecha_esperada)
VALUES (CONCAT('"', TRIM(%s), '"'), CONCAT('"', TRIM(%s), '"'));

这里TRIM用来去掉文本前后的空格,CONCAT把双引号和文本拼接在一起,这样存入数据库的值就自动带双引号了。

小提醒:如果你的MySQL字段是数值类型(比如INT),加双引号后MySQL会自动转换,但如果开启了严格模式可能会报错,所以要确保字段类型和你存入的内容匹配哦~

内容的提问来源于stack exchange,提问作者I. Valera

火山引擎 最新活动