programing

MySQL XML 출력 필드 이름을 사용 가능한 태그 이름으로 변환

sourcetip 2022. 11. 26. 13:48
반응형

MySQL XML 출력 필드 이름을 사용 가능한 태그 이름으로 변환

MariaDB 데이터베이스의 데이터를 DB 서버에 액세스 할 수 없는 머신에서 실행되는 서드파티 프로그램으로 가져오려고 하기 때문에 플랫 텍스트 파일을 사용해야 합니다.

CSV는 데이터를 읽는 프로그램이 이스케이프 및 인용과 잘 어울리지 않기 때문에 옵션이 아닙니다.

그래서 지금은 XML에 얽매여 있습니다.다행히 MySQL, 즉 MariaDB에서는--xml양쪽 파라미터mysql그리고.mysqldump명령줄 도구입니다.

그러나 모든 열에는 속성 이름="column_name"을 가진 'field'라는 이름이 있습니다.

shell> mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'"
<?xml version="1.0"?>

<resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="Variable_name">version</field>
<field name="Value">5.0.40-debug</field>
</row>

<row>
<field name="Variable_name">version_comment</field>
<field name="Value">Source distribution</field>
</row>

이 데이터를 읽어내는 프로그램이 이해할 수 있도록 하기 위해서는 다음과 같은 형식이 필요합니다.

<row>
<Variable_name>version</Variable_name>
<Value>5.0.40-debug</Value>
</row>

<row>
<Variable_name>version_comment</Variable_name>
<Value>Source distribution</Value>
</row>

이를 변환하기 위해 XSLT 스타일시트를 작성했습니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"/>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="field[@name]">
  <xsl:element name="{@name}">
    <xsl:value-of select="."/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>

이 방법은 작동하지만 명령줄에서 Xalan C++를 사용하는 대규모 데이터 세트(10만 레코드, 200만 줄 XML)에서는 매우 느립니다.15분에서 30분 정도 걸릴 수 있습니다.

더 나은 방법이 있을까요?MySQL/MariaDB에 이러한 일반적인 태그 이름 대신 일반 태그 이름을 사용하여 XML을 출력하도록 지시할 수 없고 내보내기 후에 변환해야 하는 것은 매우 유감입니다.

MySQL로부터의 xml 덤프를 처리하기 위해 다음 리소스를 사용했습니다.http://www.tutorialspoint.com/java_xml/java_dom_query_document.htm

필드 이름 태그를 루프하여 이름과 값의 쌍을 가져올 수 있습니다.

언급URL : https://stackoverflow.com/questions/36297885/translating-mysql-xml-output-fieldnames-to-usable-tag-names

반응형