【发布时间】:2018-09-15 10:32:10
【问题描述】:
我试图使用 DOM 搜索和替换 xml 标记值。例如,在我的 XML 文件中,我有一个名为teacher 的标签,在该标签内,文本显示为“Teacher A”。我想让程序做的是搜索“Teacher A”的标签值并将其更改为我想要的任何值。我知道我可以获取标签名称和项目#,但任务是搜索并找到特定标签,以便如果要对程序进行更改,这将是查找和替换标签的通用方法。
public static void reWrite() {
try {
String filepath = "school.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
// Get the staff element by tag name directly
Node staff = doc.getElementsByTagName("class").item(0);
for (int i = 0; i < 3; i++) {
/// append a new node to second student
Node Student1 = doc.getElementsByTagName("course").item(i);
Element dateOfBirth1 = doc.createElement("schoolBoard");
dateOfBirth1.appendChild(doc.createTextNode("BCS"));
Student1.appendChild(dateOfBirth1);
}
// update staff attribute
Element classElem = (Element) staff;
Node course = classElem.getElementsByTagName("course").item(0);
Element courseElem = (Element) course;
Node teacher = courseElem.getAttributeNode(filepath);
teacher.setTextContent("Mr.Theo");
//write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
System.out.println("Done");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
}
}
XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<class>
<course>
<code>ICS4U</code>
<description>Computer Programming, Grade 12, College</description>
<teacher>Teacher A</teacher>
<fileType>unmodified</fileType>
</course>
<course>
<code>ENG4U1-01</code>
<description>English, Grade 12, College</description>
<teacher>Mr.Grabham</teacher>
<fileType>unmodified</fileType>
</course>
<course>
<code>MCV4U1-01</code>
<description>Calculus and Vectors, Grade 12, College</description>
<teacher>Mr.Newbury</teacher>
<fileType>unmodified</fileType>
</course>
</class>
【问题讨论】:
-
考虑使用 XSLT 来操作 XML,有人这样做:stackoverflow.com/questions/10430411/…
-
您向我们展示的 Java 代码似乎与您描述的任务几乎没有关系:它的相关性是什么?但正如@PhilippReichart 所说,这在 XSLT 中要容易得多。