0

<column ..../>要素を削除する必要がある 40 個の xml ファイルを含むフォルダーがあります。

私はそれらすべてを一度にやりたいと思っています。変更が必要なファイルの例を次に示します。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <!-- generated using CMHInc.NHibernate.hbm.cst -->
  <class name="CMHInc.Lodge.Business.Core.ProductType, CMHInc.Lodge.Business.Core" table="ProductType" lazy="false" schema="CMHPos">
    <id name="Id" type="Guid" unsaved-value="{00000000-0000-0000-0000-000000000000}" >
      <column name="Id" sql-type="uniqueidentifier" not-null="true" unique="true" index="PK_ProductType"/>
      <generator class="guid.comb" />
    </id>
    <version name="RowId" column="RowId" generated="always" type="Byte[]"
      unsaved-value="null" access="field.camelcase-underscore"/>
    <property name="Type" type="String" access="field.camelcase-underscore" >
      <column name="Type" length="20" sql-type="varchar" not-null="true"/>
    </property>

のすべてのインスタンスを削除したい

<column name="Type" length="20" sql-type="varchar" not-null="true"/>

これが私のPowerShellコードです:

Get-ChildItem c:\xml\*.xml | % { 
    $xml = [xml](Get-Content $_.FullName)
    $xml.catalog.book |
        where { $_.title -eq "property" } |
        foreach { $_.RemoveAttribute("column") }
    $xml.Save($_.FullName)
}

次のエラーが発生しています。

"1" 個の引数を指定して "保存" を呼び出し中に例外が発生しました: "パス 'C:\xml\ActivityChargeCalculation.hbm.xml' へのアクセスが拒否されました。"

ファイルとフォルダーのセキュリティ設定を調べましたが、管理者としてログインしていて、それらのファイルを作成したばかりです。

提案?

4

2 に答える 2

1

サンプル XML は不完全で、コードと一致しません。また、属性ではなくノードを削除します。これを試して:

Get-ChildItem C:\xml\*.xml | ForEach-Object {
  $xml = [xml](Get-Content $_.FullName)

  $xml.SelectNodes("//property/column") | Where-Object {
    $_.name -eq "Type" -and
    $_.length -eq "20" -and
    $_."sql-type" -eq "varchar" -and
    $_."not-null" -eq "true"
  } | ForEach-Object {
    $_.ParentNode.RemoveChildNode($_)
  }

  $xml.Save($_.FullName)
}

通常のユーザーが のファイルへの書き込み権限を持っていない場合は、管理者権限でスクリプトを実行する必要があることに注意してくださいC:\xml

于 2013-04-27T10:54:05.400 に答える