📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag… |
|||
| (同じ利用者による、間の6版が非表示) | |||
| 482行目: | 482行目: | ||
ninja -C ./build install | ninja -C ./build install | ||
<br> | <br> | ||
==== Qtプロジェクトファイル (.pro) を使用する場合 ==== | |||
==== | |||
<syntaxhighlight lang="make"> | <syntaxhighlight lang="make"> | ||
# Qtプロジェクトファイル (.pro) | # Qtプロジェクトファイル (.pro) | ||
| 499行目: | 495行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== CMakeを使用する場合 ==== | |||
<syntaxhighlight lang="cmake"> | <syntaxhighlight lang="cmake"> | ||
# CMakeLists.txtファイル | # CMakeLists.txtファイル | ||
# pkg-configを使うための準備 | |||
find_package(PkgConfig REQUIRED) | |||
# pkg-configを使用してlibxml2ライブラリを検索 | |||
pkg_search_module(LIBXML2 REQUIRED libxml-2.0) | |||
# | # ライブラリのインクルードディレクトリをターゲットに追加 | ||
include_directories(${LIBXML2_INCLUDE_DIRS}) | |||
# ライブラリのリンクディレクトリをターゲットに追加 | |||
link_directories(${LIBXML2_LIBRARY_DIRS}) | |||
# ...略 | target_include_directories(<プロジェクト名> PRIVATE | ||
# ...略 | |||
${LIBXML2_INCLUDE_DIRS} | |||
) | |||
target_link_libraries( | target_link_libraries(<プロジェクト名> | ||
# ...略 | |||
${LIBXML2_LIBRARIES} | |||
) | |||
# libxml2のコンパイルオプション | |||
add_definitions( | |||
# ...略 | |||
${LIBXML2_CFLAGS_OTHER} | |||
) | ) | ||
</syntaxhighlight> | |||
<br> | |||
==== 要素の取得 ==== | |||
以下の例では、指定されたXML構造を持つXMLファイルを読み込み取得している。<br> | |||
<br> | |||
読み込むXMLファイルを以下に示す。<br> | |||
<syntaxhighlight lang="xml"> | |||
<!-- 使用するXMLファイル --> | |||
<Earthquake> | |||
<OriginTime>2024-08-23T21:00:00+09:00</OriginTime> | |||
<ArrivalTime>2024-08-23T21:01:00+09:00</ArrivalTime> | |||
<Hypocenter> | |||
<Area> | |||
<Name>茨城県南部</Name> | |||
<Code type="震央地名">301</Code> | |||
</Area> | |||
</Hypocenter> | |||
<jmx_eb:Magnitude type="Mj" description="M3.8">3.8</jmx_eb:Magnitude> | |||
</Earthquake> | |||
<Observation> | |||
<Pref><Name>茨城県</Name><Code>08</Code><MaxInt>2</MaxInt> | |||
<Area><Name>茨城県北部</Name><Code>300</Code><MaxInt>2</MaxInt> | |||
<City><Name>小美玉市</Name><Code>0823600</Code><MaxInt>2</MaxInt> | |||
<IntensityStation><Name>小美玉市小川*</Name><Code>0823633</Code><Int>2</Int></IntensityStation> | |||
<IntensityStation><Name>小美玉市上玉里*</Name><Code>0823635</Code><Int>2</Int></IntensityStation> | |||
</City> | |||
<City><Name>水戸市</Name><Code>0820100</Code><MaxInt>1</MaxInt> | |||
<IntensityStation><Name>水戸市千波町*</Name><Code>0820121</Code><Int>1</Int></IntensityStation> | |||
</City> | |||
</Area> | |||
</Pref> | |||
</Observation> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
| 698行目: | 744行目: | ||
for (const auto& name : intensityStationNames) { | for (const auto& name : intensityStationNames) { | ||
qDebug() << " -" << name; | qDebug() << " -" << name; | ||
} | |||
return a.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== XMLファイルの作成 ==== | |||
以下の例では、指定されたXML構造を持つXMLファイルを作成している。<br> | |||
<br> | |||
<syntaxhighlight lang="xml"> | |||
<!-- 作成するXMLファイルの構造 --> | |||
<Earthquake> | |||
<OriginTime>2024-08-23T21:00:00+09:00</OriginTime> | |||
<ArrivalTime>2024-08-23T21:01:00+09:00</ArrivalTime> | |||
<Hypocenter> | |||
<Area> | |||
<Name>茨城県南部</Name> | |||
<Code type="震央地名">301</Code> | |||
</Area> | |||
</Hypocenter> | |||
<jmx_eb:Magnitude type="Mj" description="M3.8">3.8</jmx_eb:Magnitude> | |||
</Earthquake> | |||
<Observation> | |||
<Pref><Name>茨城県</Name><Code>08</Code><MaxInt>2</MaxInt> | |||
<Area><Name>茨城県北部</Name><Code>300</Code><MaxInt>2</MaxInt> | |||
<City><Name>小美玉市</Name><Code>0823600</Code><MaxInt>2</MaxInt> | |||
<IntensityStation><Name>小美玉市小川*</Name><Code>0823633</Code><Int>2</Int></IntensityStation> | |||
<IntensityStation><Name>小美玉市上玉里*</Name><Code>0823635</Code><Int>2</Int></IntensityStation> | |||
</City> | |||
<City><Name>水戸市</Name><Code>0820100</Code><MaxInt>1</MaxInt> | |||
<IntensityStation><Name>水戸市千波町*</Name><Code>0820121</Code><Int>1</Int></IntensityStation> | |||
</City> | |||
</Area> | |||
</Pref> | |||
</Observation> | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// XMLCreator.hファイル | |||
#ifndef XMLCREATOR_H | |||
#define XMLCREATOR_H | |||
#include <QString> | |||
#include <QVector> | |||
#include <libxml/tree.h> | |||
class XMLCreator { | |||
public: | |||
static void createXML(const QString& filename, | |||
const QString& hypocenterAreaName, | |||
const QString& hypocenterAreaCodeType, | |||
const QVector<QString>& intensityStationNames); | |||
private: | |||
static xmlNodePtr createHypocenter(xmlDocPtr doc, const QString& areaName, const QString& codeType); | |||
static xmlNodePtr createObservation(xmlDocPtr doc, const QVector<QString>& stationNames); | |||
}; | |||
void XMLCreator::createXML(const QString& filename, | |||
const QString& hypocenterAreaName, | |||
const QString& hypocenterAreaCodeType, | |||
const QVector<QString>& intensityStationNames) | |||
{ | |||
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); | |||
xmlNodePtr root = xmlNewNode(NULL, BAD_CAST "Report"); | |||
xmlDocSetRootElement(doc, root); | |||
xmlNodePtr earthquake = xmlNewChild(root, NULL, BAD_CAST "Earthquake", NULL); | |||
xmlNewChild(earthquake, NULL, BAD_CAST "OriginTime", BAD_CAST "2024-08-23T21:00:00+09:00"); | |||
xmlNewChild(earthquake, NULL, BAD_CAST "ArrivalTime", BAD_CAST "2024-08-23T21:01:00+09:00"); | |||
xmlAddChild(earthquake, createHypocenter(doc, hypocenterAreaName, hypocenterAreaCodeType)); | |||
xmlNodePtr magnitude = xmlNewChild(earthquake, NULL, BAD_CAST "jmx_eb:Magnitude", BAD_CAST "3.8"); | |||
xmlNewProp(magnitude, BAD_CAST "type", BAD_CAST "Mj"); | |||
xmlNewProp(magnitude, BAD_CAST "description", BAD_CAST "M3.8"); | |||
xmlAddChild(root, createObservation(doc, intensityStationNames)); | |||
xmlSaveFormatFileEnc(filename.toUtf8().constData(), doc, "UTF-8", 1); | |||
xmlFreeDoc(doc); | |||
xmlCleanupParser(); | |||
} | |||
xmlNodePtr XMLCreator::createHypocenter(xmlDocPtr doc, const QString& areaName, const QString& codeType) | |||
{ | |||
xmlNodePtr hypocenter = xmlNewNode(NULL, BAD_CAST "Hypocenter"); | |||
xmlNodePtr area = xmlNewChild(hypocenter, NULL, BAD_CAST "Area", NULL); | |||
xmlNewChild(area, NULL, BAD_CAST "Name", BAD_CAST areaName.toUtf8().constData()); | |||
xmlNodePtr code = xmlNewChild(area, NULL, BAD_CAST "Code", BAD_CAST "301"); | |||
xmlNewProp(code, BAD_CAST "type", BAD_CAST codeType.toUtf8().constData()); | |||
return hypocenter; | |||
} | |||
xmlNodePtr XMLCreator::createObservation(xmlDocPtr doc, const QVector<QString>& stationNames) | |||
{ | |||
xmlNodePtr observation = xmlNewNode(NULL, BAD_CAST "Observation"); | |||
xmlNodePtr pref = xmlNewChild(observation, NULL, BAD_CAST "Pref", NULL); | |||
xmlNewChild(pref, NULL, BAD_CAST "Name", BAD_CAST "茨城県"); | |||
xmlNewChild(pref, NULL, BAD_CAST "Code", BAD_CAST "08"); | |||
xmlNewChild(pref, NULL, BAD_CAST "MaxInt", BAD_CAST "2"); | |||
xmlNodePtr area = xmlNewChild(pref, NULL, BAD_CAST "Area", NULL); | |||
xmlNewChild(area, NULL, BAD_CAST "Name", BAD_CAST "茨城県北部"); | |||
xmlNewChild(area, NULL, BAD_CAST "Code", BAD_CAST "300"); | |||
xmlNewChild(area, NULL, BAD_CAST "MaxInt", BAD_CAST "2"); | |||
xmlNodePtr city = xmlNewChild(area, NULL, BAD_CAST "City", NULL); | |||
xmlNewChild(city, NULL, BAD_CAST "Name", BAD_CAST "小美玉市"); | |||
xmlNewChild(city, NULL, BAD_CAST "Code", BAD_CAST "0823600"); | |||
xmlNewChild(city, NULL, BAD_CAST "MaxInt", BAD_CAST "2"); | |||
for (const auto& name : stationNames) { | |||
xmlNodePtr station = xmlNewChild(city, NULL, BAD_CAST "IntensityStation", NULL); | |||
xmlNewChild(station, NULL, BAD_CAST "Name", BAD_CAST name.toUtf8().constData()); | |||
xmlNewChild(station, NULL, BAD_CAST "Code", BAD_CAST "0823633"); | |||
xmlNewChild(station, NULL, BAD_CAST "Int", BAD_CAST "2"); | |||
} | |||
return observation; | |||
} | |||
#endif // XMLCREATOR_H | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <QCoreApplication> | |||
#include <QFile> | |||
#include "XMLCreator.h" | |||
#include <QDebug> | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication a(argc, argv); | |||
QString hypocenterAreaName = "茨城県南部"; | |||
QString hypocenterAreaCodeType = "震央地名"; | |||
QVector<QString> intensityStationNames = {"小美玉市小川*", "小美玉市上玉里*", "水戸市千波町*"}; | |||
QString filename = "earthquake_output.xml"; | |||
XMLCreator::createXML(filename, hypocenterAreaName, hypocenterAreaCodeType, intensityStationNames); | |||
// ファイルの内容を読み込んで表示 | |||
QFile file(filename); | |||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { | |||
QTextStream in(&file); | |||
QString content = in.readAll(); | |||
qDebug() << "Created XML content:"; | |||
qDebug().noquote() << content; | |||
file.close(); | |||
} | |||
else { | |||
qDebug() << "Failed to open the created XML file."; | |||
} | } | ||
| 705行目: | 908行目: | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] | ||