У меня проблема с небольшой программой, которую я написал.Он делает то, что я намеревался сделать (добавить / удалить / изменить атрибуты) очень хорошо - я очень рад этой части.Но когда я вывожу файл, мои заголовки меняются, и к некоторым элементам автоматически добавляются атрибуты.
Вот с чего я начну:
<!DOCTYPE TEI SYSTEM "teilite-ur.dtd">
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
...
<availability>
...
После преобразования каждого узла элемента в дополнительныйатрибут (имя = тест, значение = рабочий), вот что я получаю в итоге:
<TEI xmlns="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" test="working">
<teiHeader test="working" type="text">
<fileDesc test="working">
...
<availability default="false" status="unknown" test="working">
...
Итак, краткий обзор:
- ! DOCTYPE строка была удалена
- xmlns: xsi ... был добавлен
- type = "text", default = "false", status = "unknown" anchored = "true" атрибуты добавляются автоматически (могут быть и другие, но этиэто те, которые показались мне).
Я читал здесь [/1707582/udalit-obyavlenie-xml-iz-sgenerirovannogo-dokumenta-xml-s-ispolzovaniem-java], как предотвратить добавление декларации XML в начало.Но я не уверен, как отключить остальные дополнения.
Спасибо!
Вот некоторый автономный код, который выполняет в основном то, что я хочу (немного больше настроек вреальная программа, но это не должно относиться к делу) и соответствующее руководство IBM , которое я использовал для его создания:
package xml_attrib_test;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class Main {
public static void main(String[] args) {
//Input
File whichFile = new File("C:\\Users\\mw2xx\\Desktop\\proceedings.vol1.xml");
DocumentBuilderFactory domFactory;
DocumentBuilder builder;
Document doc;
XPathFactory factory;
XPath xpath;
XPathExpression expr;
NodeList nodes;
try {
domFactory = DocumentBuilderFactory.newInstance();
domFactory.setSchema(null);
domFactory.setValidating(false);
domFactory.setNamespaceAware(true);
domFactory.setExpandEntityReferences(false);
builder = domFactory.newDocumentBuilder();
doc = builder.parse(whichFile);
factory = XPathFactory.newInstance();
xpath = factory.newXPath();
expr = xpath.compile("//*");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
nodes = (NodeList) result;
} catch (Exception ex) {
System.out.println("Error in parser.");
return;
}
// Do Stuff With the XML Doc
String attributeTag = "test";
String attrValue = "working";
for (int j = 0; j < nodes.getLength(); j++) {
Node n = nodes.item(j);
if (n.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) n;
e.setAttribute(attributeTag, attrValue);
} else if (n.getNodeType() == Node.ATTRIBUTE_NODE) {
Attr a = (Attr) n;
if (a.getName().equals(attributeTag)) {
a.setValue(attrValue);
}
}
}
// Output
TransformerFactory tFactory;
Transformer transformer;
DOMSource source;
File resultFile;
StreamResult result;
try {
tFactory = TransformerFactory.newInstance();
transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
source = new DOMSource(doc);
resultFile = new File("$$$$$.tmp");
result = new StreamResult(resultFile);
transformer.transform(source, result);
} catch (Exception ex) {
System.out.println("Error in transformer.");
return;
}
whichFile.delete();
resultFile.renameTo(whichFile);
System.out.println("Success!");
}
}