sedを使用して親要素に指定された属性値を持つ要素の名前空間のみを置き換える

sedを使用して親要素に指定された属性値を持つ要素の名前空間のみを置き換える

sedを使用してxmlファイルの名前空間を置き換えたいと思います(必要なantでこれを行うことを放棄しました)。主な問題は、重複要素のリストがあることです。すべての要素を交換する必要はありません。

XMLファイル:

<xml-fragment>
  <imp:exportedItemInfo instanceId="WikiDS_v1_PS" typeId="ProxyService" xmlns:imp="http://www.bea.com/wli/config/importexport">
    <imp:properties>
      <imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.XmlEntryDocumentImpl"/>
      <imp:property name="isencrypted" value="false"/>
    </imp:properties>
  </imp:exportedItemInfo>
  <imp:exportedItemInfo instanceId="NonShared/wikitest/FileUploadManagementDS_v1_BS_WSDL" typeId="WSDL" xmlns:imp="http://www.bea.com/wli/config/importexport">
    <imp:properties>
      <imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.WsdlEntryDocumentImpl"/>
      <imp:property name="isencrypted" value="false"/>
    </imp:properties>
  </imp:exportedItemInfo>
  <imp:exportedItemInfo instanceId="NonShared/wikitest/WikiTestDS_v1_BS" typeId="BusinessService" xmlns:imp="http://www.bea.com/wli/config/importexport">
    <imp:properties>
      <imp:property name="dataclass" value="com.bea.wli.sb.resources.config.impl.XmlEntryDocumentImpl"/>
      <imp:property name="isencrypted" value="false"/>
    </imp:properties>
  </imp:exportedItemInfo>
</xml-fragment>

したがって、この場合、ブロックの名前空間をProxyService typeIdに置き換えたいのですが、他の名前空間は変更しないようにします。

答え1

sed特定のパターンに一致する行のみを置き換えるために使用できます。

sed -e '/typeId="ProxyService"/s/xmlns:imp="http:\/\/www.bea.com\/wli\/config\/importexport"/xmlns:imp="http:\/\/www.bea.com\/wli\/config\/importexport2"/' new.xml

これにより、 "typeId = "ProxyService"に一致する行の名前空間だけが置き換えられます。名前空間に2を追加したが、必要な文字列に置き換えることができます。

関連情報