使用 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,但您可以将其替换为您选择的任何字符串。

相关内容