【发布时间】:2014-04-24 15:35:51
【问题描述】:
我正在寻找一种从以下搜索字符串值的方法
<Test>
<Name>XYZ</Name>
<City>London</City>
</Test>
请注意,标签不会重复。
以上内容存储在一个字符串中。我想写一个 java 方法来做这样的事情:
tagvalue = getvalue(<TagName>)
for example tagvalue=getvalye(Name)
另外,我想要一个返回根标签(字符串中的第一个标签)的方法,即它应该返回"Test"。
我知道 Java 解析器和 DOM 可以完成这项任务,但我不想使用它们。我可以简单地通过字符串操作方法来做到这一点吗?还是其他方法?
我正在尝试的解决方案如下:
//Method Call
String tag_value = getvalue(databuffer,"Name");
//Method
private String getvalue(String Content, String Tagname)
{
if (Content.contains("<"+Tagname+">"))
{
if(Content.contains("</"+Tagname+">"))
{
//How do I get Tag value here?
return Tagvalue;
}
}
}
正在尝试的另一个解决方案是:
//method
private String getvalue(String Content, String Tagname)
{
//<Name>XYZ</Name>
int Starttag = Content.indexOf("<"+Tagname+">");//Returns 0
int Endtag = Content.indexOf("</"+Tagname+">");//Returns 9
//How to find the total length of <Starttag> so that I can subtract it with the index of Endtag to get the value?
return ;
}
我可以从任何人那里得到任何帮助吗?
//我已经更新了元素名称中命名空间的问题...
输入文件如下所示
<ns:Test>
<ns:Name>XYZ</ns:Name>
<ns:City>London</ns:City>
</ns:Test>
注意:我不知道即将到来的命名空间?它可能是 ns 或 np ......任何东西..如何处理?我知道的一件事是分隔符将是“:”
是否可以使用字符串方法简单地忽略元素名称中的命名空间来获取以下逻辑中的元素值?
方法调用: String elementvalue = getElementvalue(databuffer,"Name")
方法:
public String getvalue(String buffer, String tagname)
{
String startTag, endTag,elementdata = null;
int startposition,endposition;
try
{
startTag = "<"+ tagname + ">";
endTag = "</"+ tagname + ">";
startposition = buffer.indexOf(startTag);
startposition = startposition + startTag.length();
endposition = buffer.indexOf(endTag);
elementdata = buffer.substring(startposition, endposition);
}
return elementdata;
}
如果有人可以帮助我,请告诉我?
【问题讨论】:
-
你可以通过字符串读取来做到这一点,递归可能是最好的:读取元素的开始
,找到元素的结束 ,并递归地为子标签做同样的事情。 -
您能否向我们展示您为尝试实现需求而编写的代码
-
I know Java parser and DOM can do this task but I don't want to use them为什么不想使用为您完成解析工作的库? -
@jedison 如果您有两个相同的标签,您可能会遇到问题。取决于他们确定标签不重复的程度。
-
@Trengot,我只是基于“注意:标签不会重复。”