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

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

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

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

解決済

1回答

3286閲覧

zipを解凍してxmlを修正するPGM

ykkchak

総合スコア15

XML

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

0クリップ

投稿2017/07/13 14:21

zipファイルの中にあるxmlの特定のタグの値を修正するPGMを作りたいです。
下記がサンプルになります。abc.zipにabc.xmlがあり、「test1です」を「テスト1です」に書き換えたいです。
どのような言語でどうコーディングするのが楽でしょうか
端末上で動作されるイメージなのでVBAかパワーシェルかVbscriptあたりで考えています。
vbaで調べてみると泥くさいことをしないといけない感じでした。(①zip解凍,②xml修正)
サンプルを提示して頂けますと助かります。

abc.zip
abc.xml

<?xml version="1.0" encoding="UTF-8"?>
<test> <test1>test1です</test1> <test2>test2です</test2> </test>

-------------------------------①zip解凍--------------------------------
Public Sub UnZipFile(ByVal SrcPath As Variant, _
Optional ByVal DestFolderPath As Variant = "")
'ZIPファイルを解凍
'SrcPath:元ファイル
'DestFolderPath:出力先、指定しない場合は元ファイルと同じ場所
'※出力先に同名ファイルがあった場合はユーザー判断で処理
With CreateObject("Scripting.FileSystemObject")
If .FileExists(SrcPath) = False Then Exit Sub
If LCase(.GetExtensionName(SrcPath)) <> "zip" Then Exit Sub
If IsFolder(DestFolderPath) = False Then
DestFolderPath = .GetFile(SrcPath).ParentFolder.Path
End If
End With

With CreateObject("Shell.Application")
.NameSpace(DestFolderPath).CopyHere .NameSpace(SrcPath).Items
End With
End Sub

Private Function IsFolder(ByVal SrcPath As String) As Boolean
IsFolder = CreateObject("Scripting.FileSystemObject").FolderExists(SrcPath)
End Function

Private Function IsFile(ByVal SrcPath As String) As Boolean
IsFile = CreateObject("Scripting.FileSystemObject").FileExists(SrcPath)
End Function

Private Function AddPathSeparator(ByVal SrcPath As String) As String
If Right(SrcPath, 1) <> ChrW(92) Then SrcPath = SrcPath & ChrW(92)
AddPathSeparator = SrcPath
End Function
-------------------------------②xml修正--------------------------------
Sub loadXml()
Dim xD As New MSXML2.DOMDocument60

' ファイルから読み込み xD.Load "D:\test.xml" ' 値取得方法1 Debug.Print "Test Case 1" Debug.Print xD.DocumentElement.SelectSingleNode("test1").Text Debug.Print vbCrLf ↑修正のやり方がわかりません。。。。。。。。。。

End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

どの部分が泥臭いのか、よくわかりませんが、
ZIPファイルの解凍のその方法は、サポート対象外ですのでうまくいかない場合があります。

CopyHere メソッドから Zip ファイルを処理することはできません

UNZIP32.DLL, 7-zip32.DLL等の外部のライブラリを使う方がいいでしょう。

7-zip32.DLLを利用してZIPファイルの作成と解凍 - hatena chips

XMLの読み込み、書き込みについては下記のコードをご参考に。
VBAのコードです。
要参照設定 Microsoft XML, v6.0

Sub loadXml() Dim xD As New MSXML2.DOMDocument60 Dim xN As MSXML2.IXMLDOMNode ' ファイルから読み込み xD.Load "c:\test\abc.xml" 'test1ノードの取得 Set xN = xD.DocumentElement.SelectSingleNode("test1") 'test1ノードの書き換え xN.Text = Replace(xN.Text, "test1です", "テスト1です") Set xN = xD.DocumentElement.SelectSingleNode("test2") xN.Text = Replace(xN.Text, "test2です", "テスト2です") 'ファイルに上書き xD.Save "c:\test\abc.xml" Set xN = Nothing Set xD = Nothing End Sub

投稿2017/07/14 12:26

hatena19

総合スコア33715

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問