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
'programing' 카테고리의 다른 글
java: String Builder를 사용하여 선두에 삽입 (0) | 2022.11.26 |
---|---|
jQuery를 사용하여 페이지의 스크롤 위치를 탐지하는 방법 (0) | 2022.11.26 |
월말일 계산 (0) | 2022.11.26 |
Sequel Pro와 MySQL을 연결하지 못했습니다. (0) | 2022.11.26 |
JavaScript 문자열 트리밍 (0) | 2022.11.26 |