在编辑xml时,java的dom如何删除doctype?
得到了这个xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE map[ <!ELEMENT map (station*) >
<!ATTLIST station id ID #REQUIRED> ]>
<favoris>
<station id="5">test1</station>
<station id="6">test1</station>
<station id="8">test1</station>
</favoris>
我的功能很基本:
public static void EditStationName(int id, InputStream is, String path, String name) throws ParserConfigurationException, SAXException, IOException, TransformerFactoryConfigurationError, TransformerException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(is);
Element e = dom. getElementById(String.valueOf(id));
e.setTextContent(name);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
FileOutputStream fos = new FileOutputStream(path);
Result result = new StreamResult(fos);
Source source = new DOMSource(dom);
xformer.setOutputProperty(
OutputKeys.STANDALONE,"yes"
);
xformer.transform(source, result);
}
它正在工作,但是文档类型被删除了!我只得到了整个文档,却没有doctype部分,这对我来说很重要,因为它允许我按id进行检索!我们如何保留doctype?为什么会擦除它?我用outputkeys或omImpl.createDocumentType尝试了许多解决方案,但这些都不起作用…
谢谢 !
(此响应只是对@Grzegorz Szpetkowski的答案(为什么起作用)的补充)
您丢失了doctype定义,因为您使用了Transform
产生XSL转换的类。DOCTYPE
XSLT树模型中没有声明或docytype定义对象/节点。当解析器将文档移交给XSLT处理器时,文档类型信息将丢失,因此无法保留或复制。XSLT提供了对输出树的序列化的一些控制,包括添加`<!DOCTYPE
…
带有公共或系统标识符的声明。这些标识符的值需要事先知道,并且不能从输入树中读取。也不支持创建或保留嵌入式DTD或实体声明(尽管对此障碍的一种解决方法是将其输出为带有的文本
disable-
output-escaping=”yes”`)。
为了保留DTD,您需要使用XML序列化器而不是XSL转换来输出文档,就像已经建议的Grzegorz。
问题内容: 我有下面的xml: Ι要解析此xml文件并从 ListofDocs 获取 主题ID 和 百分比 __ 第一种方法是从xml获取所有文档元素,然后检查祖父节点是否为ListofDocs。但是元素文档存在于 rankDocs 和 listOfDocs中 ,因此我有一个很大的列表。 所以我想知道是否存在更好的解决方案来解析此xml以避免if语句? 我的代码: 问题答案: 首先,在检查节点名称
问题内容: 我有下面的xml: Ι要解析此xml文件并从 ListofDocs 获取 主题ID 和 百分比 __ 第一种方法是从xml获取所有文档元素,然后检查祖父节点是否为ListofDocs。但是元素文档存在于 rankDocs 和 listOfDocs中 ,因此我有一个很大的列表。 所以我想知道是否存在更好的解决方案来解析此xml以避免if语句? 我的代码: 问题答案: 首先,在检查节点名称
问题内容: 我想解析以下网址:http : //eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi? db= nucleotide& id= 224589801 结果,我想出了以下方法: 通过这种方法,我可以获取Item节点的值,但不能获取其任何属性。我尝试使用NamedNodeMap与getAttribute()进行实验,但仍然无济于事。 为什
问题内容: 我目前正在解析XML,但是我不太确定如何解析“消息”的“状态”属性: 这是代码,我切断了所有不必要的内容: 谁能指导我该如何完成? 提前致谢。 问题答案: Node.getAttributes() 如果使用XPATH检索数据,则可以避免遍历。阅读本教程。
主要内容:Java DOM解析器 解析XML文档的步骤,Java DOM解析器 解析XML文档的示例Java DOM解析器 解析XML文档的步骤 以下是使用 DOM解析器 解析文档时使用的步骤。 导入与 XML 相关的包。 创建一个文档生成器。 从文件或流创建文档 提取根元素 检查属性 检查子元素 导入 XML 相关的包 创建一个文档生成器 从文件或流创建文档 提取根元素 检查属性 检查子元素 Java DOM解析器 解析XML文档的示例 项目结构如下: input.xml文件: DomPars
问题内容: 任何人都可以在Java中为dom解析器共享好的文档。 谢谢 问题答案: 以下是在Java中使用DOM的教程: xml dom DOM解析器 java-xml-dom dom示例 希望这可以帮助。