�0�2�0�2�0�2 最近遇到一个问题,用java解析xml时,需要获得一个xml文档中指定的某个节点,当然最简单的办法就是遍历所有的节点,如某个节点满足条件,则是我们要的结果,但我不想遍历所有的节点,因为这个问题只是一个复杂过程中的一小步,它会被反复调用,因此我需要最直接的方法获得某个已知属性值的确定节点。因此,这个问题也可以概括为:有没有根据节点(或name)属性名获得该节点的原api。
�0�2�0�2�0�2�0�2 具体一些,有如下xml文档:<sheet<field row="2" col="2" type="int"DEA_XZ</field2_2
<field row="2" col="3" type="string"RTP_ID</field2_3
<field row="2" col="4" type="string"DEA_YEAR</field2_4
<field row="2" col="7" type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 我想获得row="2" col="3"的节点,据我所查,好像没有直接的方法。
�0�2�0�2 变通一下,xml修改如下:�0�2<sheet<field name="row2_col2" type="int"DEA_XZ</field2_2
<field name="row2_col3" type="string"RTP_ID</field2_3
<field name="row2_col4" type="string"DEA_YEAR</field2_4
<field name="row2_col7" type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 这样呢?有没有直接的api,可以获得name为row2_col3的节点?同样,我也没有得到答案,大家有知道告诉小弟一下,不胜感激。
�0�2�0�2 实在没有办法,我就用了种“另类”的方式,xml如下:<sheet<field2_2 type="int"DEA_XZ</field2_2
<field2_3 type="string"RTP_ID</field2_3
<field2_4 type="string"DEA_YEAR</field2_4
<field2_7 type="int"DEA_RTP_TYPE</field2_7</sheet�0�2�0�2 这样看起来很不优雅,至少我是这么认为的。但这样却可以直接拿到你想要的节点:�0�2orgjdomElement root = documentgetRootElement();
�0�2�0�2 目前,我就是这样解决的,但我感觉很不优雅,我想我的xml文档(配置)文件应该保持第一种或第二种格式更好些。所以请大家帮忙,看看有没有直接的方法(api)
java读取xml节点元素,主要使用java提供的解析xml的工具类SAXParserFactory,如下代码:package xmlxmlreader;import javaioFile;import javanetURL;import javautilProperties;import javaxxmlparsersSAXParser;import javaxxmlparsersSAXParserFactory;public class CFGParser {//解析xml文件的工具类 private Properties props; public Properties getProps() { return props; } public void setProps(Properties props) { thisprops = props; } public void parse(String filename) throws Exception { CFGHandler handler = new CFGHandler(); SAXParserFactory factory = SAXParserFactorynewInstance(); factorysetNamespaceAware(false); factorysetValidating(false); SAXParser parser = factorynewSAXParser(); URL confURL = supergetClass()getClassLoader()getResource(filename); if (confURL == null) { Systemoutprintln("Can't find configration file"); return; } try { parserparse(confURLtoString(), handler); thisprops = handlergetProps(); } finally { factory = null; parser = null; handler = null; } } public void parseFile(String filename) throws Exception { CFGHandler handler = new CFGHandler(); SAXParserFactory factory = SAXParserFactorynewInstance(); factorysetNamespaceAware(false); factorysetValidating(false); SAXParser parser = factorynewSAXParser(); File f = new File(filename); if ((f == null) || (!fexists())) return; try { parserparse(f, handler); thisprops = handlergetProps(); } finally { factory = null; parser = null; handler = null; } }}package xmlxmlreader;import javautilProperties;import orgxmlsaxAttributes;import orgxmlsaxSAXException;import orgxmlsaxhelpersDefaultHandler;public class CFGHandler extends DefaultHandler{ private Properties props; private String currentSet; private String currentName; private StringBuffer currentValue = new StringBuffer(); public CFGHandler() { thisprops = new Properties(); } public Properties getProps() { return thisprops; } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { thiscurrentValuedelete(0, thiscurrentValuelength()); thiscurrentName = qName; } public void characters(char[] ch, int start, int length) throws SAXException { thiscurrentValueappend(ch, start, length); } public void endElement(String uri, String localName, String qName) throws SAXException { thispropsput(qNametoLowerCase(), thiscurrentValuetoString()trim()); }}xml文件 6 10 23:00 12:00 18:00jsp获取各个节点的值:
我也遇到了楼主的问题,希望动态得到节点名称,根据5楼的提示,我看到了tagName 这个重要的属性,然后自己研究一下成功了
<script type="text/javascript">
var xml>
string xmlpath="你xml的地址";
XDocument xdoc = XDocumentLoad(xmlpath);
XElement xele = xdocRootElement("元素名");
//如果你要根据属性来查询的话,这么用
IEnumerable<XElement> xeles=from xel in xdocRootDescendants()
where xelAttribute("name")Value=="33"
select xel;
XElement xelee=xelesFirstOrDefault();
这里的xelee就是你需要读取的节点,你可以读取它的子节点或它自己的属性就可以了
比如xeleeElement("UserName")Value等
以上就是关于java中如何直接获得xml中的某个指定的节点全部的内容,包括:java中如何直接获得xml中的某个指定的节点、java中dom4j解析xml文件怎么获取节点属性、js 怎么获取xml根节点下的所有子节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)