質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Q&A

解決済

2回答

5305閲覧

.xmlファイルの編集(文字の挿入・書き換え)の条件指定・自動化

SakuSakuLab

総合スコア8

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

0グッド

0クリップ

投稿2020/09/27 06:39

解決したいこと

.xmlファイルの編集(文字の挿入・書き換え)の仕方についてお尋ねします。
.xmlファイルの取扱は初めてです。

以下のような.xmlファイルがあります。
269903個のSpotなるものがあります。
それぞれのSpotにIDがついています(Spot ID)。

略 <AllSpots nspots="269903"> <SpotsInFrame frame="0"> <Spot ID="0" name="0 (0)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1236.23" POSITION_Y="928.249" FRAME="0" POSITION_Z="295.887" /> <Spot ID="1" name="1 (1)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1225.3" POSITION_Y="932.687" FRAME="0" POSITION_Z="211.349" /> <Spot ID="2" name="2 (2)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1242.79" POSITION_Y="942.75" FRAME="0" POSITION_Z="171.126" /> <Spot ID="3" name="3 (3)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1478.31" POSITION_Y="1174.03" FRAME="0" POSITION_Z="172.19" /> . . . . .

特定のSpot IDに「Manual spot color="1"」といった文字を挿入したいのです。
例えば、

<Spot ID="0" name="0 (0)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1236.23" POSITION_Y="928.249" FRAME="0" POSITION_Z="295.887" />

<Spot ID="0" name="0 (0)" QUALITY="3.0" POSITION_T="0.0" POSITION_X="1236.23" POSITION_Y="928.249" FRAME="0" POSITION_Z="295.887" Manual spot color="1"/>

にするといったことです。

すべてのSpot IDについてこのような操作をするのではなく、
「POSITION_Xの値が1000以上のSpot IDだけに特定の文字を挿入する」
といった条件を指定して操作をおこないたいのです。

このような操作を可能にするソフトウェア(エディタ?)やその手順を教えていただきたいです。
また、このような操作を詳しく説明してあるサイト・書籍などもあれば合わせて教えてたいだきたいです。

.xmlは触ったことがありません。私の質問の意図・詳細がわからなければお尋ねください。

使用環境はWindowsがメインです。たまにLinux (Ubuntu)。
使用言語はPythonを少々。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

XMLエディタ(XMLで書かれたデータを編集するためのエディタ)は、様々なものが作られています(フリーソフトもあります)。
質問者が手作業で作業されるのであれば、そうしたエディタを使ってください。
エディタには検索機能がありますから、
・「<Spot ID="1000"」を検索する。
・検索された行末の"/>"の前に、特定の文字列を挿入する。
というような操作を繰り返せば、希望しているような変更が出来ます。

「POSITION_Xの値が1000以上のSpot IDだけに特定の文字を挿入する」といった条件を指定して操作を自動化したい、というのであればPythonなどのプログラミング言語を使ってプログラムを作成してください。
XMLはHTMLと同様のマークアップ言語なので、"<"で始まって、"/>"で終わるまでが、ひとつの集まり、という形式になっているか、"<タグ名称 ... >"で始まって、途中に文字列をはさんで、"</タグ名称>で終わる形式になっています。
使われている形式に従って、正規表現を使った検索、置換、挿入、削除といった操作を順次行うようなコードになるかと思います。

投稿2020/09/27 10:12

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SakuSakuLab

2020/09/27 10:38

ご回答ありがとうございます。 Pythonなどの言語でプログラムを作成するのですね。 Pythonが身近なのでPythonで.xmlの編集についてググってみます。 ベストアンサーにさせていただきます。 ありがとうございました。
guest

0

xml.etree.ElementTree --- ElementTree XML API — Python 3.8.6 ドキュメント

Python が使えるなら Python で行えばいいと思います。

例えば各 country の rank に 1 を足して、rank 要素に updated 属性を追加したい場合:

Python

1>>> for rank in root.iter('rank'): 2... new_rank = int(rank.text) + 1 3... rank.text = str(new_rank) 4... rank.set('updated', 'yes') 5... 6>>> tree.write('output.xml')

投稿2020/09/27 10:34

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/09/27 10:35

ただし Manual spot color は空白が含まれているので、XML の属性名として使えません。別の名前を考えてください。
SakuSakuLab

2020/09/27 10:38

そういったルールもあるのですね。 ご指摘ありがとうございます。 そのへんの情報も調べてみます。 ありがとうございました。
Zuishin

2020/09/27 10:44 編集

> 使用言語はPythonを少々。 これで質問して「Python を使います」という結論になる意味がわかりませんが、そんなことが聞きたかったんですか? なぜ質問する前にそこに気づかなかったのか気になるので教えてください。
SakuSakuLab

2020/09/27 10:47

大変わかりやすい、具体例をありがとうございます。 この投稿に気づかずに、ベストアンサーを確定してしまいました。 申し訳ありません。 フォローさせていただきます。 ありがとうございます。 早速試してみます。
Zuishin

2020/09/27 10:50

フォローをしてくれということではなく、この質問で何が聞きたかったのかが聞きたいんですが。
SakuSakuLab

2020/09/27 10:51

そんなことが聞きたかったんです。 プログラミングを初めたばかりで、 「.xmlファイルをpythonで処理する」というのが頭にありませんでした。 pythonはdeep learningしか使っていなかったので python =画像ファイルだけを処理する。という思考になっていました。 申し訳ありません。
Zuishin

2020/09/27 10:58 編集

なぜ頭になかったことを質問に書いたかよくわかりませんが、了解しました。 > 使用言語はPythonを少々。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問