トップ回答者
XMLファイルに新たにタグを追加し、追加したタグで項目(データ)を囲う。

質問
-
前提・実現したい事
---
①PowerShellを使用し、SharePoint Online上のリストを、「XMLファイル」でローカルに保存する。
(*プログラム作成済)【保存したXMLファイル】
<!-- 元のXML -->
<?xml version= "1.0"?>
<catalog>
<book id= "bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applicationswith XML.</description>
</book>
<book id= "bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description>
</book>
</catalog>↓
②保存したXMLファイルの中には、不要な項目(タグ)があるので、PowerShellを使い必要なタグのみ抽出。(別名で保存)
(*プログラム作成済)
【必要なタグのみ抽出したXMLファイル】抽出するタグ名 → title, genre, price
<!-- 抜き出したXML -->
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>↓
③必要なタグのみ抽出したXMLファイルを開くと、必要な項目(タグ)のみ抽出されてはいるが、見づらいので
1アイテム毎にタグでくくり、見やすくしたい。
**(*プログラム作成中。不明点)**【この様なXMLファイルにしたい】
<!-- 理想のXML.この様にしたい! -->
<data>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
</data>
<data>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</data>==========================================
SampleのXMLファイルのコードを載せると、
「お客様の投稿にフラグが付けられ、現在、確認が行われています。
誤ってフラグが付いたと思われる場合は、スレッドの ここ に投稿してください。」
とメッセージが表示され、細かく記載出来ません。
10数回試しましたがダメでした。
投稿不可にならない様、コード化せず文字だけの説明になっており申し訳ございません。
==========================================
- 編集済み mie.8 2017年6月27日 4:22 修正.
回答
-
直接の回答ではありませんが…。
①から②を作った後に③を生成するのはちょっと手順がよろしくないように思います。
というのも、②のフォーマットは、title,genre,priceが平坦に並んでいて、どこからどこまでが1レコードなのかという情報が消失しているからです。
①から直接③を生成するような手順に切り替えた方が、結局はシンプルなコードになるかと思います。
ちなみにですが、②と③のフォーマットは、XML文書としては正しくないものとなります。そのため、後で何らかのプログラムにXML文書として読み込もうとするとエラーになります。XML文書にはルート要素(①の<catalog>に相当)が必要です。
- 回答としてマーク mie.8 2017年6月27日 6:19
すべての返信
-
直接の回答ではありませんが…。
①から②を作った後に③を生成するのはちょっと手順がよろしくないように思います。
というのも、②のフォーマットは、title,genre,priceが平坦に並んでいて、どこからどこまでが1レコードなのかという情報が消失しているからです。
①から直接③を生成するような手順に切り替えた方が、結局はシンプルなコードになるかと思います。
ちなみにですが、②と③のフォーマットは、XML文書としては正しくないものとなります。そのため、後で何らかのプログラムにXML文書として読み込もうとするとエラーになります。XML文書にはルート要素(①の<catalog>に相当)が必要です。
- 回答としてマーク mie.8 2017年6月27日 6:19
-
牟田口大介さまが書かれた通り、xmlのルート要素は一つしか持てませんので元のcatalogを使い、本のidも残しておいたほうが使い勝手が良さそうなので、dataタグにいれてみました。
$orgstr=@" <?xml version= "1.0"?> <catalog> <book id= "bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applicationswith XML.</description> </book> <book id= "bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> </catalog> "@ $orgXml=[xml]$orgstr $newXml=[xml]'<?xml version= "1.0"?><catalog><dmy/></catalog>' $books=$orgXml.selectNodes('//book') $books|%{ $id=$_.id $title=$_.title $genre=$_.genre $price=$_.price $data=$newXml.CreateElement("data") $data.setAttribute("id",$id)|out-null $newTitle=$newXml.CreateElement("title") $newGenre=$newXml.CreateElement("genre") $newPrice=$newXml.CreateElement("price") $newTitle.innerText=$title $newGenre.innerText=$genre $newPrice.innerText=$price @($newTitle,$newGenre,$newPrice)|%{ $data.appendChild($_)|out-null } $newXml.Catalog.AppendChild($data)|out-null } $dmy=$newXml.selectSingleNode('//dmy') $dmy.parentNode.RemoveChild($dmy)|out-null $tmp=[system.io.path]::GetTempFileName() $newXml.save($tmp) gc $tmp rm $tmp
できたxmlはこんな感じです
<?xml version="1.0"?> <catalog> <data id="bk101"> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> </data> <data id="bk102"> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> </data> </catalog>
- 編集済み ballville 2017年8月2日 17:34