ฉันกำลังพยายามเพิ่มโค้ด XML หลายชิ้นจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง ปัญหาคือ ชิ้นส่วนเหล่านี้บางส่วนมีแท็กรูทที่ไม่จำเป็นต้องคัดลอกลงในไฟล์ XML ปลายทาง (ซึ่งเป็นกรณีนี้หากแท็กรูทเท่ากับแท็กพาเรนต์ที่กำหนดไว้ล่วงหน้า) นี่คือโค้ดที่ฉันใช้เพื่อแทรกตัวอย่างข้อมูล (เขียนด้วย Groovy):
if (addCode.nodeName == parentTags) { //meaning the root tags shouldn't be included
for (org.w3c.dom.Node n : addCode.childNodes) {
//parent is a NodeList
parent.item(parent.length - 1).appendChild(document.importNode(n, true))
}
} else {
parent.item(parent.length - 1).appendChild(document.importNode(addCode, true))
}
และเพื่อแยกวิเคราะห์ XML:
Document parseWithoutDTD(Reader r, boolean validating = false, boolean namespaceAware = true) {
FactorySupport.createDocumentBuilderFactory().with { f ->
f.namespaceAware = namespaceAware
f.validating = validating
f.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
f.newDocumentBuilder().with { db ->
db.parse(new InputSource(r))
}
}
}
นี่คือตัวอย่างไฟล์ XML ที่ไม่ควรรวมแท็กรูท:
<catalogue> <!-- shouldn't be included -->
<message key='type_issuedate'>Date Issued</message>
<message key='type_accessioneddate'>Date Accesioned</message>
</catalogue>
คุณอาจสังเกตเห็นปัญหา: หากฉันละแท็กรูทออกจากไฟล์ XML เพื่อคัดลอกไปยังไฟล์ XML อื่น แท็กเหล่านั้นจะส่งข้อยกเว้นการแยกวิเคราะห์
แก้ไข: นี่คือตัวอย่าง (ย่อ) ของไฟล์ที่จะแทรก:
<catalogue xml:lang="en" xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
...
<message key="column4">Date</message>
<message key="column5">Summary</message>
<message key="column6">Actions</message>
<message key="restore">Restore</message>
<message key="update">Update</message>
<!-- INSERT XML HERE -->
...
</catalogue>
และตัวอย่างของ XML ที่มีแท็กรูทที่จะรวมไว้ (และไฟล์ที่เกี่ยวข้องที่จะแทรก):
XML ที่จะแทรก
<dependency>
<groupId>grID</groupId>
<artifactId>artID</artifactId>
<version>${version.number}</version>
</dependency>
ไฟล์ XML ที่จะแทรกลงใน
<?xml version="1.0" encoding="UTF-8"?>
<project>
<dependencies>
<dependency>
<groupId>grID1</groupId>
<artifactId>artID1</artifactId>
<type>jar</type>
<classifier>classes</classifier>
</dependency>
<!-- INSERT XML HERE -->
</dependencies>
</project>
ขณะนี้โค้ดทั้งหมดนี้ใช้งานไม่ได้ตามที่ฉันต้องการ ใครสามารถช่วยฉันออก?
ชื่นชมมาก!