java中怎样取出XML格式字符串的节点属性

java中怎样取出XML格式字符串的节点属性,第1张

这个可以用正则表达式来实现。。。

要看你xml具体内容,才能确定表达式该怎么写,我给你举个简单的例子

<a><b>hello</b><b>world</b></a>想提取出b标签里面的内容可以用下面的代码实现

import javautilregexMatcher;

import javautilregexPattern;

public class Test {

public static void main(String[] args){

String s = "<a><b>hello</b><b>world</b></a>";

Pattern pattern = Patterncompile("<b>()</b>");

Matcher matcher = patternmatcher(s);

while(matcherfind()){

Systemoutprintln(matchergroup(1));

}

}

}

运行结果:

hello

world

如果很复杂的话。。。可以用专门的解析XML的来解析。。。一般的自己写个正则就可以解决了。。

希望能帮到你。。。仍有问题可以继续追问或者直接HI我。。。

可以通过元素中的getText方法获取到节点的内容。

举例:

SAXReader sax = new SAXReader();

Document document = saxread(reader);//reader为定义的一个字符串,可以转换为xml

Element root = documentgetRootElement();//获取到根节点元素String str = root getText()//获取到节点的内容

用到的是dom4j-161jar,需要引入的包是:

import orgdom4jDocument;

import orgdom4jDocumentException;

import orgdom4jElement;

import orgdom4jioSAXReader;

备注:如果是多个子节点可以通过”Element xx=root element("code")“获取到子节点的元素,前提是需要知道子节点的名称。

import javaioFile;import javaioFileNotFoundException;import javaioFileOutputStream;import javaioIOException;import orgw3cdom;import orgxmlsaxSAXException;import javaxxmlparsers;import javaxxmltransform;import javaxxmltransformdomDOMSource;import javaxxmltransformstream;import javaxxmlxpath;public class Test { public static void main(String[] args) { DocumentBuilderFactory factory=DocumentBuilderFactorynewInstance(); Element theBook=null, theElem=null, root=null; try { factorysetIgnoringElementContentWhitespace(true); DocumentBuilder db=factorynewDocumentBuilder(); Document xmldoc=dbparse(new File("Test1xml")); root=xmldocgetDocumentElement(); theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root); Systemoutprintln("--- 查询找《哈里波特》 ----"); Element nameNode=(Element)theBookgetElementsByTagName("price")item(0); String name=nameNodegetFirstChild()getNodeValue(); Systemoutprintln(name); output(theBook); Systemoutprintln("=============selectSingleNode(books/book[name='哈里波特'], root)=================="); //--- 新建一本书开始 ---- theBook=xmldoccreateElement("book"); theElem=xmldoccreateElement("name"); theElemsetTextContent("新书"); theBookappendChild(theElem); theElem=xmldoccreateElement("price"); theElemsetTextContent("20"); theBookappendChild(theElem); theElem=xmldoccreateElement("memo"); theElemsetTextContent("新书的更好看。"); theBookappendChild(theElem); rootappendChild(theBook); Systemoutprintln("--- 新建一本书开始 ----"); output(xmldoc); Systemoutprintln("=============================="); //--- 新建一本书完成 ---- //--- 下面对《哈里波特》做一些修改。 ---- //--- 查询找《哈里波特》---- //--- 此时修改这本书的价格 ----- theBookgetElementsByTagName("price")item(0)setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的"//price"。 Systemoutprintln("--- 此时修改这本书的价格 ----"); output(theBook); //--- 另外还想加一个属性id,值为B01 ---- theBooksetAttribute("id", "B01"); Systemoutprintln("--- 另外还想加一个属性id,值为B01 ----"); output(theBook); //--- 对《哈里波特》修改完成。 ---- //--- 要用id属性删除《三国演义》这本书 ---- theBook=(Element) selectSingleNode("/books/book[@id='B02']", root); Systemoutprintln("--- 要用id属性删除《三国演义》这本书 ----"); output(theBook); theBookgetParentNode()removeChild(theBook); Systemoutprintln("--- 删除后的XML ----"); output(xmldoc); //--- 再将所有价格低于10的书删除 ---- NodeList someBooks=selectNodes("/books/book[price<10]", root); Systemoutprintln("--- 再将所有价格低于10的书删除 ---"); Systemoutprintln("--- 符合条件的书有 "+someBooksgetLength()+"本。 ---"); for(int i=0;i<someBooksgetLength();i++) { someBooksitem(i)getParentNode()removeChild(someBooksitem(i)); } output(xmldoc); saveXml("Test1_Editedxml", xmldoc); } catch (ParserConfigurationException e) { eprintStackTrace(); } catch (SAXException e) { eprintStackTrace(); } catch (IOException e) { eprintStackTrace(); } } public static void output(Node node) {//将node的XML字符串输出到控制台 TransformerFactory transFactory=TransformerFactorynewInstance(); try { Transformer transformer = transFactorynewTransformer(); transformersetOutputProperty("encoding", "gb2312"); transformersetOutputProperty("indent", "yes"); DOMSource source=new DOMSource(); sourcesetNode(node); StreamResult result=new StreamResult(); resultsetOutputStream(Systemout); transformertransform(source, result); } catch (TransformerConfigurationException e) { eprintStackTrace(); } catch (TransformerException e) { eprintStackTrace(); } } public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点 Node result=null; XPathFactory xpathFactory=XPathFactorynewInstance(); XPath xpath=xpathFactorynewXPath(); try { result=(Node) xpathevaluate(express, source, XPathConstantsNODE); } catch (XPathExpressionException e) { eprintStackTrace(); } return result; } public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。 NodeList result=null; XPathFactory xpathFactory=XPathFactorynewInstance(); XPath xpath=xpathFactorynewXPath(); try { result=(NodeList) xpathevaluate(express, source, XPathConstantsNODESET); } catch (XPathExpressionException e) { eprintStackTrace(); } return result; } public static void saveXml(String fileName, Document doc) {//将Document输出到文件 TransformerFactory transFactory=TransformerFactorynewInstance(); try { Transformer transformer = transFactorynewTransformer(); transformersetOutputProperty("indent", "yes"); DOMSource source=new DOMSource(); sourcesetNode(doc); StreamResult result=new StreamResult(); resultsetOutputStream(new FileOutputStream(fileName)); transformertransform(source, result); } catch (TransformerConfigurationException e) { eprintStackTrace(); } catch (TransformerException e) { eprintStackTrace(); } catch (FileNotFoundException e) { eprintStackTrace(); } }} XML:<xml version="10" encoding="GBK"><books><book><name>哈里波特</name><price>10</price><memo>这是一本很好看的书。</memo></book><book id="B02"><name>三国演义</name><price>10</price><memo>四大名著之一。</memo></book><book id="B03"><name>水浒</name><price>6</price><memo>四大名著之一。</memo></book><book id="B04"><name>红楼</name><price>5</price><memo>四大名著之一。</memo></book></books>

以上就是关于java中怎样取出XML格式字符串的节点属性全部的内容,包括:java中怎样取出XML格式字符串的节点属性、java怎么取出xml中指定节点中的内容、JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9766028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存