我正在使用java.I有一个xml文件,如下所示:
<?xml version="1.0"?>
<personaldetails>
<phno>1553294232</phno>
<email>
<official>xya@gmail.com</official>
<personal>bk@yahoo.com</personal>
</email>
</personaldetails>
现在,我需要使用特定条件检查其类型的每个标记值,并将它们放在单独的文件中。
例如,在上面的文件中,我写了10位数的条件等于电话号码, 格式为xxx@yy.com的内容是电子邮件..
所以,我需要做的是我需要提取每个标签中的标签值,如果它匹配某个条件,它将被放在第一个文本文件中,如果不是在第二个文本文件中。 在这种情况下,第一个文本文件将包含:
1553294232
xya@gmail.com
bk@yahoo.com
和第二个文件中的其余值。
我只是不知道如何在不使用标记名的情况下提取标记值。(或者不使用GetElementsByTagName)。
我的意思是这个代码应该提取电子邮件bk@yahoo.com,即使我提供&lt; mailing>
而不是<personal>
tag.It不应该依赖于标签名称。
希望我不要混淆。我是使用xml.So的java新手,请原谅我,如果我的问题很愚蠢。 请帮助。
答案 0 :(得分:2)
似乎是XPath
的典型用例XPath允许您以非常灵活的方式查询XML。
本教程可以提供帮助:
http://www.javabeat.net/2009/03/how-to-query-xml-using-xpath/
如果您正在使用Java 脚本,可能就是这种情况,因为您提到了getElementsByTagName(),您可以使用JQuery选择器,它将为您提供跨浏览器的一致行为,以及如果你还没有使用它,JQuery库对很多其他东西很有用...... http://api.jquery.com/category/selectors/
这里有关于此的信息:
http://www.switchonthecode.com/tutorials/xml-parsing-with-jquery
答案 1 :(得分:1)
由于您不知道自己的element
名称,我建议您创建一个DOM
树并对其进行迭代。当您获得element
时,您会尝试将其与ruleset
匹配(我会建议您使用regex
为此目的)然后写它到你的文件。
这将是一个帮助您入门的示例结构,但您需要根据您的要求对其进行修改:
public void parseXML(){
try{
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc;
doc = documentBuilder.parse(new File("test.xml"));
getData(null, doc.getDocumentElement());
}catch(Exception exe){
exe.printStackTrace();
}
}
private void getData(Node parentNode, Node node){
switch(node.getNodeType()){
case Node.ELEMENT_NODE:{
if(node.hasChildNodes()){
NodeList list = node.getChildNodes();
int size = list.getLength();
for(int index = 0; index < size; index++){
getData(node, list.item(index));
}
}
break;
}
case Node.TEXT_NODE:{
String data = node.getNodeValue();
if(data.trim().length() > 0){
/*
* Here you need to check the data against your ruleset and perform your operation
*/
System.out.println(parentNode.getNodeName()+" :: "+node.getNodeValue());
}
break;
}
}
}
您可能希望查看Chain of Responsibility
设计模式来设计规则集。