如题
现有一字符串
<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>
想单独把里面的四组数字提取出来给四个变量
现求大家意见
可以取两个空格之间的部分
也可以取<***></***>之间的部分
各位大虾帮帮小菜鸟吧
补充下这个是个JSP问题,谢谢各位撒
现有一字符串
<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>
想单独把里面的四组数字提取出来给四个变量
现求大家意见
可以取两个空格之间的部分
也可以取<***></***>之间的部分
各位大虾帮帮小菜鸟吧
补充下这个是个JSP问题,谢谢各位撒
否则用String.split(String regex)函数,参数regex是正规式,有点麻烦,看帮助吧
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import java.util.Properties;//使用DefaultHandler的好处 是 不必陈列出所有方法,
public class ConfigParser extends DefaultHandler {////定义一个Properties 用来存放 dbhost dbuser dbpassword的值
private Properties props;private String currentSet;
private String currentName;
private StringBuffer currentValue = new StringBuffer();//构建器初始化props
public ConfigParser() {this.props = new Properties();
}public Properties getProps() {
return this.props;
}//定义开始解析元素的方法. 这里是将 中的名称xxx提取出来.
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
currentValue.delete(0, currentValue.length());
this.currentName =qName;}//这里是将 之间的值加入到currentValuepublic void characters(char[] ch, int start, int length) throws SAXException {currentValue.append(ch, start, length);}//在遇到 结束后,将之前的名称和值一一对应保存在props中public void endElement(String uri, String localName, String qName) throws SAXException {props.put(qName.toLowerCase(), currentValue.toString().trim());
}} import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.net.URL;public class ParseXML{//定义一个Properties 用来存放 dbhost dbuser dbpassword的值
private Properties props;//这里的props
public Properties getProps() {
return this.props;
}public void parse(String filename) throws Exception {//将我们的解析器对象化
ConfigParser handler = new ConfigParser();//获取SAX工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);//获取SAX解析
SAXParser parser = factory.newSAXParser();//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes
//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
URL confURL = BeansConstants.class.getClassLoader().getResource(filename);try
{
//将解析器和解析对象myenv.xml联系起来,开始解析
parser.parse(confURL.toString(), handler);
//获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
props = handler.getProps();
}finally{
factory=null;
parser=null;
handler=null;
}}}
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="javax.xml.parsers.*" %> <html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Test</title>
</head> <body>
<%
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(application.getRealPath("/")+System.getProperty("file.separator")+"message.xml");
NodeList nl = doc.getElementsByTagName("message");
Node my_node = nl.item(0);
String message = my_node.getFirstChild().getNodeValue();
%>
int i = 1, a = 0, b = 0, c = 0;
String result = "";
while (i < 5) {
a = test.indexOf(">");
b = test.indexOf("<", a);
result = test.substring(a + 1, b);
System.out.println("第" + i + "个字段为:" + result);
c = test.indexOf("<", b + 1);
if (c == -1) break;
test = test.substring(c, test.length());
i++;
}
<script>
var str="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
var reg=/<(.*?)>(.*?)<\/\1>/g;
var list=new Array();
str.replace(reg,function(a,b,c){list.push(c);});
alert(list);
</script>
String str="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
String reg="<(.*?)>(.*?)<\\/\\1>";
List list1=new ArrayList();
List list2=new ArrayList();
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
while(m.find()){
list1.add(m.group(1));
list2.add(m.group(2));
}
for(int i=0;i<list1.size();i++){
System.out.println(list1.get(i)+"="+list2.get(i));
}
谢谢
issgates(一直很安静)
给我很大的提示
终于自己搞出来了
虽然大家写的都很好,但是我真的看不懂啊
issgates(一直很安静)谢谢你的思路
给你50分好了
其他的大家也会得分
谢谢大家了
[\d]*?
{
public static void main(String [] args)
{
String test = "<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
String [] array1 = test.split(" ");
for(String s1 : array1)
{
String [] array2 = s1.split(">");
for(int i=1;i<array2.length;i+=2)
{
String [] array3 = array2[i].split("<");
for(int j=0;j<array3.length;j+=2)
{
System.out.println(array3[j]);
}
}
}
}
}楼主不识货 lip009(深蓝忧郁) ( ) 和 xizhiyao(流浪的猴子) ( ) 才应该平分100分
如果你正则表达式用得好一点,用前者,实在不怎么会,用后者.
我只会用split
String a="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>“String b[] = a.split("</");
得到<merID>000000000027
merID> <CheckDate>20070316
......
...........等等String x = b[0].substring(b[0].lastindexof(">"),b[0].length-b[0].lastindexof(">"));大概就是如此了,
小问题你调下
/**
* 获得一对xml标签中的字符串
*
* @param aXMLString
* @param aTag
* @return tagValue
*/
private static String getValueNoNull(String aXMLString, String aTag) {
String tagValue = "";
int tStartIndex = aXMLString.indexOf("<" + aTag.trim() + ">");
int tEndIndex = aXMLString.indexOf("</" + aTag.trim() + ">");
if (tStartIndex >= 0 && tEndIndex >= 0 && tStartIndex < tEndIndex) {
tagValue = new String(aXMLString.substring(tStartIndex + aTag.length() + 2, tEndIndex));
}
return tagValue;
}
String s = "<ert>0909000</ert><gg>9839842</gg><ul>208424</ul><pop>203402</pop>";
java.util.regex.Pattern p =
java.util.regex.Pattern.compile("<([\\w]+)>([\\w]+)</\\1>");
java.util.regex.Matcher m = p.matcher(s);
while(m.find()){
for(int i=1;i<=m.groupCount();i++)
System.out.println(m.group(i));
}
String reg = "<(\\w+?)>(\\d+?)<\\/\\1>";
List list1 = new ArrayList();
List list2 = new ArrayList(); Pattern p = Pattern.compile(reg); Matcher m = p.matcher(str); while (m.find()) {
System.out.println("m.groupCount() = " + m.groupCount());
list1.add(m.group(1));
list2.add(m.group(2));
} for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i) + "=" + list2.get(i));
}
我觉得用apache 的Digester 好像更简单哦;org.apache.commons.digester.Digester:)Good Luck.