Tag: dom

使用DOM解析器解析XML中的属性

我目前正在解析XML,但我不太确定如何解析“message”的“status”属性: sometext stuff 这是代码,我已经切断了一切不必要的东西: NodeList nodeLst = doc.getElementsByTagName(“message”); for (int s = 0; s < nodeLst.getLength(); s++) { Node fstNode = nodeLst.item(s); if (fstNode.getNodeType() == Node.ELEMENT_NODE) { Element fstElmnt = (Element) fstNode; NodeList numberNmElmntLst = fstElmnt .getElementsByTagName("msisdn"); Element numberNmElmnt = (Element) numberNmElmntLst.item(0); NodeList numberNm = numberNmElmnt.getChildNodes(); String phoneNumber = ((Node) numberNm.item(0)) .getNodeValue().substring(2); NodeList txtNmElmntLst = […]

以编程方式创建xslt文件

我知道我可以通过在java中使用DOM api以编程方式创建xml文件,如下所示: DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.newDocument(); Element rootElement = document.createElement(“map”); document.appendChild(rootElement); Element em = document.createElement(“string”); em.setAttribute(“name”, “FirstName”); …. 但是有没有API构建一个xslt树? (例如像Dom这样的api) 我需要像这样的东西: Good Morning, ! 和: 提前致谢。

Java DOM – 一个接一个地插入一个元素

给出以下XML文件: 我想在某个预先存在的元素之后在添加一个新元素 。 例如,如果我想在”Assign1″之后添加节点,则新XML应该是这样的: 我必须在一个函数中使用Java DOM来做到这一点。 函数签名应该是这样的: public void addActionDom(String name, String stepType, String stepName) 哪里: name是预先存在的元素,之后将插入; stepType是插入的元素类型; stepName是新插入元素的name属性。 目前,我缺乏JDOM或任何其他Java XML库的经验。 你能给出一个示例代码,或者指向一个教程,其中插入一个元素之后插入。 这是我迄今为止的代码: public void addActionDom(String name, String stepType, String stepName) { File xmlFile = new File(path + “/resources/” + BPELFilename); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { /* Load XML */ db = […]

getChildNodes给出了意想不到的结果

我的XML看起来像这样 – ValueGoesHere 我正在使用以下代码处理它 – Document dom = parser.getDocument(); NodeList collected_objects = dom.getElementsByTagName(“object”); System.out.println(“Number of collected objects are ” + collected_objects.getLength()); for (int i = 0; i < collected_objects.getLength(); i++) { Node aNode = collected_objects.item(i); //get children of "objects" NodeList refNodes = aNode.getChildNodes(); System.out.println("# of chidren are " + refNodes.getLength()); //print attributes of "objects" NamedNodeMap […]

如何将流结果转换为字符串

我想将流结果输出转换为字符串,因为我想在Junit中使用它我认为我需要使用字符串编写器,但我不确定如何使用它。 StreamResult result = new StreamResult(new File(“C:\\file.xml”)); transformer.transform(source, result); 谢谢Fedor

Java:解析XML文件:DOM,SAX还是StAX?

我正在使用Apache Tomcat开发RSS feed聚合器。 我想知道使用哪个解析器来读取RSS源。 我应该使用DOM,SAX还是StAX? 我知道有一些特定的库可以用java阅读RSS源,但由于这是一个大学项目,我不应该使用它们。 谢谢。

使用nodeList创建XML文档

我需要使用NodeList创建一个XML Document对象。 有人可以帮我做这件事。 我已经向您展示了下面的代码和xml import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.*; import org.w3c.dom.*; public class ReadFile { public static void main(String[] args) { String exp = “/configs/markets”; String path = “testConfig.xml”; try { Document xmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(path); XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression xPathExpression = xPath.compile(exp); NodeList nodes = (NodeList) xPathExpression.evaluate(xmlDocument, XPathConstants.NODESET); } catch (Exception ex) { ex.printStackTrace(); } […]

遍历NodeList时删除DOM节点

我即将删除XML文档中的某些元素,使用如下代码: NodeList nodes = …; for (int i = 0; i < nodes.getLength(); i++) { Element e = (Element)nodes.item(i); if (certain criteria involving Element e) { e.getParentNode().removeChild(e); } } 这会干扰NodeList的正确遍历吗? 用这种方法还有其他注意事项吗? 如果这是完全错误的,那么正确的做法是什么?

Java XML DOM:id属性如何特殊?

Document类的javadoc在getElementById下有以下注释。 注意:除非如此定义,否则名称为“ID”或“id”的属性不是ID类型 所以,我在DOM中读了一个XHTML文档(使用Xerces 2.9.1)。 该文档中有一个简单的旧 。 我调用getElementById(“fribble”) ,它返回null。 我使用XPath来获取“// * [id =’fribble’]”,一切都很好。 那么,问题是,是什么导致DocumentBuilder实际将ID属性标记为“如此定义?”

Java XML解析:避免实体引用解析

我目前正在使用DOM解析器解析XHTML文档,例如: final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); final DocumentBuilder db = dbf.newDocumentBuilder(); db.setEntityResolver(MY_ENTITY_RESOLVER); db.setErrorHandler(MY_ERROR_HANDLER); … final Document doc = db.parse(inputSource); 我的问题是当我的文档包含实体引用时,例如: € 我的解析器为该内容创建一个Text节点,其中包含“€”而不是“&euro;”。 也就是说,它正在以它应该的方式解析实体(XHTML 1.0 Strict DTD链接到ENTITIES Latin1 DTD,后者又建立了“&euro;”与“€”的等价性)。 问题是,我不希望解析器做这样的事情。 我想保留“&euro;” 文本未经修改 。 我已经尝试过了: final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false); 但: 我不喜欢这个,因为我担心这可能会使一些解析器实现无法从XHTML 1.0 Strict DTD 导航到ENTITIES Latin1 DTD,因此不考虑“&euro;” 作为声明的实体。 当我这样做时,它奇怪地创建了两个节点:一个“磅”实体节点,以及一个带有“€”符号的Text节点。 有任何想法吗? 是否有可能在DOM Parser中配置它而不需要预处理 XHTML并用所有“&”符号代替其他东西?… 解决方案可以是DOM解析器,也可以是SAX解析器,我不介意使用SAX解析,然后使用转换创建我的DOM […]