xml - 如果包含带有 sed 的某些字符串,则删除 xml 节点
问题描述
我目前正在尝试从 xml 文件中删除包含特定模式的所有节点。
我需要删除所有块:
<artifactItem>...</artifactItem> containing libprogram-* in <artifactId>libprograms-*</artifactId>
这是xml(只是开始):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
<parent>
<groupId>lu.foyer.exzos</groupId>
<artifactId>exzos</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
-->
<groupId>lu.foyer.exzos</groupId>
<artifactId>foyer-pms</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Foyer Pms</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<!--outputDirectory>${project.basedir}/run/programs</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeTransitive>true</excludeTransitive-->
<artifactItems>
<!-- Programs dependencies -->
<artifactItem>
<groupId>lu.foyer.exzos</groupId>
<artifactId>XactAnubexSyncJavaSupLib</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>${project.basedir}/run/programs</outputDirectory>
<destFileName>XactAnubexSyncJavaSupLib.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>exzos.bazel</groupId>
<artifactId>libprograms-client-cobol</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>${project.basedir}/run/programs</outputDirectory>
<destFileName>libprograms-client-cobol.jar</destFileName>
</artifactItem>
...
我尝试了几个 sed 命令,但没有成功。
任何帮助,将不胜感激。
谢谢
解决方案
sed 是该工作的错误工具。使用 XSLT 或其他一些可识别 XML 的工具,例如 xmlstarlet 或 Saxon 的 Gizmo。
例如,在 Gizmo 中:
java net.sf.saxon.Gizmo -s:input.xml
/>delete //artifactItem[matches(., 'libprogram-*')]
/>save output.xml
/>quit
推荐阅读
- php - 如何在laravel中将变量从一个页面传递到另一个页面
- angular - Call a function inside ngFor in Angular 9 lose context
- php - Invalid version string "*"
- python - Python Selenium program terminates after 2~3 hours since it started. It seems like WebSocket Connection Problem. Please teach me
- html - 如何将此搜索图标移动到焦点右侧,使其跟随输入字段?
- javascript - 在本地 Node.js/Express/React 开发中使用自签名证书
- python - 在 Pandas DataFrame 中匹配字符串的更有效方法
- sandbox - Coinbase API沙盒开发版
- c - 我无法计算字符串中的单词
- sas - 缺失的数值转换为字符