Tôi đang cố phân tích cú pháp và sửa đổi tệp pom.xml của Maven bằng XmlSlurper của Groovy. Pom.xml của tôi khai báo không gian tên xsi.không gian tên tag0 được thêm vào cho các phần tử trong không gian tên mặc định
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>a-group-id</groupId>
<artifactId>an-artifact-id</artifactId>
nguồn Groovy của tôi là như sau:
import groovy.xml.XmlUtil
def pom = new XmlSlurper().parse('pom.xml')
.declareNamespace('': 'http://maven.apache.org/POM/4.0.0',
xsi: 'http://www.w3.org/2001/XMLSchema-instance')
//manipulate the pom
println XmlUtil.serialize(pom)
Như bạn thấy, tôi đã tuyên bố không gian tên đầu tiên như trống rỗng. Tuy nhiên trong tag0 đầu ra được thêm vào ở khắp mọi nơi.
<?xml version="1.0" encoding="UTF-8"?>
<tag0:project xmlns:tag0="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/maven-v4_0_0.xsd">
<tag0:modelVersion>4.0.0</tag0:modelVersion>
<tag0:groupId>a-group-id</tag0:groupId>
<tag0:artifactId>an-artifact-id</tag0:artifactId>
Làm cách nào để tránh điều đó?
Đối với thời điểm này workaround của tôi là loại bỏ các thẻ bằng tay:
println XmlUtil.serialize(pom).replaceAll('tag0:', '').replaceAll(':tag0', '')
Việc xây dựng 'XmlSlurper' không có hỗ trợ không gian tên có đủ không? tức là: 'println XmlUtil.serialize (new XmlSlurper (false, false) .parse ('pom.xml'))'? –
wow, vâng, thế là đủ rồi, cảm ơn Tim. bạn có thể cung cấp nó như là một câu trả lời? Ngoài ra tôi đã nhận thấy rằng tất cả các ý kiến trong XML bị mất, bạn có biết cách giải quyết nào cho nó không? BTW, đây là hai tiện ích tôi đã viết [pomRm] (http://www.stefanolocati.it/blog/?p=1226) và [pomVersions] (http://www.stefanolocati.it/blog/?p= 1220). – stivlo
Không thể xem cách giữ bình luận tại thời điểm này ... :-(Tôi sẽ nghĩ nếu tôi có một khoảnh khắc miễn phí chiều nay ... –