Tag: dom

如何更改DOM中每个节点上的命名空间?

在给定w3c DOM(Java的默认实现,特别是)中,我如何更改该DOM中每个元素/属性/节点的名称空间? 有效地,优选地。 DOM上似乎没有setNamespaceURI方法,这很不方便。 我已经尝试过XSL方法,但是它们无法在JAXP变换器中工作(尽管它们在Saxon9B中可以正常工作,但由于其他各种原因我无法使用它)。 基本上,我需要一个纯粹的核心java解决方案,它允许我获取一个文档并更改其命名空间。

保留数字字符实体字符,例如`
 
`在Java中解析XML时

我正在解析包含数字字符实体字符的XML,例如(但不限于) < > < > (Java中的换行回车)。 在解析时,我将节点的文本内容附加到StringBuffer,以便稍后将其写入文本文件。 但是,当我将String写入文件或将其打印出来时,这些unicode字符将被解析或转换为换行符/空格。 在Java中迭代XML文件的节点并将文本内容节点存储到String时,如何保留原始数字字符实体字符符号? demo xml文件的示例: 示例Java代码。 它加载XML,遍历节点并将每个节点的文本内容收集到StringBuffer。 迭代结束后,它将StringBuffer写入控制台,也写入文件(但没有 )符号。 将这些符号存储到字符串时,保留这些符号的方法是什么? 你可以帮我吗? 谢谢。 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException { DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); Document document = null; DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder(); document = documentBuilder.parse(new File(“path/to/demo.xml”)); StringBuilder sb = new StringBuilder(); […]

使用DOM解析xml,DOCTYPE将被删除

在编辑xml时,如何用java擦除doctype? 得到这个xml文件: <!DOCTYPE map[ ]> test1 test1 test1 我的function很基础: 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 = […]

无法使用DOM解析器读取带有名称空间前缀的xml

这是输入XML: A00179-02 这是我用来读取XML的代码(变量xmlString包含上面的XML): DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xmlString)); Document doc = db.parse(is); System.out.println(“Element :” + doc.getElementsByTagName(“Token”).item(0)); System.out.println(“Element :” + doc.getElementsByTagName(“ns2:Token”).item(0)); 输出: Element :null Element :[ns2:Token: null] 如果我使用“ns2:Token”作为标记名称,我能够读取元素,但我不想在我的代码中使用前缀,因为我不确定它是否相同或更改未来。 有没有办法在不对标记名称中的命名空间进行硬编码的情况下读取xml元素?

当点击’&amp;’时,DocumentBuilder解析会破坏字符串

我有这个xml: H & M 并使用此代码解析它: DocumentBuilder documentBuilder = null; Document document = null; try {documentBuilder = DocumentBuilderFactory.newInstance()。newDocumentBuilder(); document = documentBuilder.parse(is); } catch(例外e){返回结果; NodeList nl = document.getElementsByTagName(XML_RESPONSE_ROOT); if(nl.getLength()> 0){resp_code = nl.item(0).getAttributes()。getNamedItem(XML_RESPONSE_STATUS).getNodeValue(); if(resp_code.equals(RESP_CODE_OK_SINGLE)){nl = document .getElementsByTagName(XML_RESPONSE_TAG_CONTACT); NodeList values = nl.item(i).getChildNodes(); 等等.. 当我得到节点值时:node.getNodeValue(); 我得到的只是&符号之前的东西,即使&符号被逃脱了 我想得到整个字符串:“H&M” 谢谢

从Java发送OWA登录表单

我感兴趣的是一种从Java代码以编程方式登录OWA(Microsoft Outlook Web Access – 基于Web的电子邮件客户端)并检索收件箱未读计数的方法 – 我可以从收件箱网页的HTML源中读取此数字 – 但问题是到了那里 – 登录。 从本质上讲,通过查看OWA登录页面的HTML源代码,我可以看到有一个HTML表单元素: 由其中的按钮元素提交: 从调查clkLgn()脚本,我发现它向文档发送一个cookie,因此它可能不是至关重要的: function clkLgn() { if(gbid(“rdoPrvt”).checked) { var oD=new Date(); oD.setTime(oD.getTime()+2*7*24*60*60*1000); var sA=”acc=”+(gbid(“chkBsc”).checked?1:0); var sL=”lgn=”+gbid(“username”).value; document.cookie=”logondata=”+sA+”&”+sL+”;expires=”+oD.toUTCString(); } } 基本上,我该如何发送此表格? 以下代码是我对此问题的尝试,我可以建立HTTP连接 – 但我似乎无法发出正确的HTTP请求。 URL urlObject = new URL(url); HttpURLConnection hConnection = (HttpURLConnection)urlObject.openConnection(); HttpURLConnection.setFollowRedirects(true); hConnection.setDoOutput(true); hConnection.setRequestMethod(“POST”); PrintStream ps = new PrintStream(hConnection.getOutputStream()); ps.print(“username=”+username+”&password=”+password); ps.close(); hConnection.connect(); […]

将命名空间添加到已创建的XML文档中

我正在使用String值创建W3C Document对象。 创建Document对象后,我想在本文档的根元素中添加一个名称空间。 这是我目前的代码: Document document = builder.parse(new InputSource(new StringReader(xmlString))); document.getDocumentElement().setAttributeNS(“http://com”, “xmlns:ns2”, “Test”); document.setPrefix(“ns2”); TransformerFactory tranFactory = TransformerFactory.newInstance(); Transformer aTransformer = tranFactory.newTransformer(); Source src = new DOMSource(document); Result dest = new StreamResult(new File(“c:\\xmlFileName.xml”)); aTransformer.transform(src, dest); 我用作输入的内容: DDDDDD DDDD 输出应该是什么样的: DDDDDD DDDD 我还需要将前缀值和命名空间添加到输入xml字符串。 如果我尝试上面的代码,我得到这个例外: NAMESPACE_ERR: An attempt is made to create or change an object in […]

为什么我的DOM解析器无法读取UTF-8

我有问题,当XML文件中有UTF-8字符时,我的DOM解析器无法加载文件现在,我知道我必须给他指令读取utf-8,但我不知道如何把它在我的代码中,它是: File xmlFile = new File(fileName); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile); doc.getDocumentElement().normalize(); 我知道有方法setencoding(),但我不知道在我的代码中把它放在哪里…

如何在java中将String转换为DOM Document对象?

我有一个案例,比如获取XML并将XML元素转换为文档对象并获取已经创建的元素值和属性 这是我试图将字符串转换为DOM文档对象的一段代码 String xmlString = ” d”; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); org.w3c.dom.Document document = builder.parse(new InputSource(new StringReader(xmlString))); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new StringWriter()); transformer.transform(source, result); String str1 = result.getWriter().toString(); System.out.println(str1); 但是这种情况仅适用于没有属性的元素,如果有的话我们可以做什么 String xmlString = ” pcdata” 我们使用双引号作为属性值“value”。 编译器显示错误 […]

在使用Java解析时如何在文档元素之前保留空格?

在我的应用程序中,我改变了一些XML文件,它们的开头如下: … 请注意之前的空白行。 加载,更改和保存后,结果远非令人满意: … 我发现注释和文档节点之间的空白(一个换行符)根本没有在DOM中表示。 以下自包含代码可靠地重现该问题: String source = “\n\n”; byte[] sourceBytes = source.getBytes(“UTF-16”); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length)); DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation(); LSSerializer lsSerializer = domImplementation.createLSSerializer(); System.out.println(lsSerializer.writeToString(doc)); // output: \n 有谁知道如何避免这种情况? 基本上,我希望输出与输入相同。 (我知道xml声明将被重新生成,因为它不是DOM的一部分,但这不是问题。)