我正在编写一个java代码,用于查找XML中任何属性(attr)Ex。 description 的元素Ex。 food 。
我做了什么
我将attr的第一个char作为起始位置,然后检查它是否等于“<”从这一点开始我循环忽略空格,制表符等并继续追加有效的字符,直到我找到另一个空格,tab。但这不起作用。它应该找到“<”之后的第一个单词。并且仅打印。但它实际上直到结束时它在“<”之后找到第一个字符
注意:我不能使用DOM等XML解析器
XML
<breakfast_menu>
<food name="Belgian Waffles" price="$5.95" discount="20"
description="Two" calories="650" />
</breakfast_menu>
for (int k = start_position; k >= 0; k--) {
char testChar = xmlInString.charAt(k);
String temp = Character.toString(testChar);
if ("<".equals(temp)) {
System.out.println(k + "value of k");
for (int j = k + 1; j >= 0; j++) {
char appendChar = xmlInString.charAt(j);
String temp1 = Character.toString(appendChar);
if(!("".equals(temp1))) {
System.out.println(j + " " + appendChar);
}
}
}
}
我现在做了一些改动,并按预期工作。在“&lt;”之后给出第一个字。如果您有任何建议,请告诉我。
int k, j, l;
for (k = start_position; k >= 0; k--) {
char testChar = xmlInString.charAt(k);
String temp = Character.toString(testChar);
if ("<".equals(temp)) {
break;
}
}
for (j = k + 1; j <= start_position; j++) {
char appendChar = xmlInString.charAt(j);
String temp1 = Character.toString(appendChar);
if (!("".equals(temp1))) {
break;
}
}
for (l = j; l <= start_position; l++) {
char appendChar1 = xmlInString.charAt(l);
String temp2 = Character.toString(appendChar1);
if (" ".equals(temp2)) {
break;
}
}
System.out.println(xmlInString.substring(j, l));
答案 0 :(得分:0)
我认为这会有所帮助
String str = "<food name=\"Belgian Waffles\" price=\"$5.95\" discount=\"20\"\n" ;
String res = str.substring(str.indexOf("<"), str.indexOf(" ", str.indexOf("<") + "<".length()) + " ".length());
System.out.println(res);
<强>输出强>
<food
答案 1 :(得分:0)
你内在的while循环for (int j = k + 1; j >= 0; j++) {
被打破了。条件j >= 0
没有意义 - j只增加,所以它怎么可能&lt; 0?相反,你应该寻找下一个空格,标签等。
我认为你的解决方案不会起作用,但这就是你发布的代码以及为什么它会在最后运行时出错。