gpt4 book ai didi

java - 使用 SAX 修改 XML 文件

转载 作者:行者123 更新时间:2023-11-30 07:34:33 36 4
gpt4 key购买 nike

我目前正在尝试生成一组模型(通过 XML 指定)。为了实现此目的,我需要更改文件内的单个属性并将其保存在新文件名下。

XML 文件如下所示:

(...)
<place id="P19" initialMarking="0" invariant="&lt; inf" markingOffsetX="0.0" markingOffsetY="0.0" name="P19" nameOffsetX="-5.0" nameOffsetY="35.0" positionX="615.0" positionY="375.0"/>
<place id="P20" initialMarking="0" invariant="&lt; inf" markingOffsetX="0.0" markingOffsetY="0.0" name="P20" nameOffsetX="-5.0" nameOffsetY="35.0" positionX="375.0" positionY="225.0"/>
(...)

需要将initialMarking 的值更改为2 到999 之间的值。

这是我到目前为止所拥有的:这是我获取要更改的文件列表并将它们传递给解析器的地方

public void parse(String dir){
getFiles(dir);

try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader();

for(int i = 0; i < fileList.length; i++) {
FileReader reader = new FileReader(fileList[i]);
InputSource inputSource = new InputSource(reader);
xmlReader.setContentHandler(new ModelContentHandler());
xmlReader.parse(inputSource);
}
(...)

这是我搜索需要更改的元素的地方:

public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
if(localName.equals("place") && atts.getValue(0).equals("P14") && atts.getValue(1).equals("2")){
System.out.println("Initial Marking of " + atts.getValue(0) + " is: " + atts.getValue(1) + "\n");
while(currentTokens <= Configuration.MAX_TOKENS){
System.out.println("Setting initial Tokens to: " + currentTokens);

}
}
}

现在,我不想打印“设置...”,而是想更改相应的值,并将整个文件保存在“Model_X_Y_Token.xml”等新名称下。

看起来是一件相当简单的事情,但我以前从未使用过 SAX,并且在查看 JavaDoc 时,我什至找不到开始的地方。也许有人可以指出我正确的方向?

最佳答案

这里最好的方法之一是使用 dom4j .我不太清楚你想要做什么,但我理解你想要得到的结果。请注意,为此您还需要 jaxen。

第 1 步:将文件读入 xml 文档

for(int i=0; i<fileList.length; i++){
Document doc = new SAXReader().read(fileList[i]);
}

第2步:解析您需要的元素。为此,您需要了解一些 xpath。///place 将获取所有 place 元素。///place[@id="P14"] 将仅获取一个地点元素。

Element place14 = (Element) doc.selectSingleNode("//*/place[@id="p14" and   initialMarking="2"]");

第3步:更改元素的属性

plac14.attribute("attributename").setValue("attributeValue");

关于java - 使用 SAX 修改 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584828/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com