我正在尝试使用Java中的Pattern和matcher搜索字符串中的元素。
我有一个节点变量项,需要获取这些节点之间的所有字符。 我尝试了下面的正则表达式,但它完全跳过了这一行。 但是,如果我在Notepad ++中使用相同的正则表达式进行搜索,我将获得所需的结果。请建议。
<variant-items>((.|\n)*)</variant-items>
以下是我的实施
String patternSourceComponent = "<variant-items>((.|\n)*)</variant-items>";
String result=this.isMatched(patternSourceComponent, xml);
public String isMatched(String patternSourceComponent,String xml)
{
String varientItem="";
try{ Pattern patternComponent = Pattern.compile(patternSourceComponent);
Matcher matcherComponent = patternComponent.matcher(xml);
System.out.println("matcherComponent Find : "+matcherComponent.find());
while (matcherComponent.find()) {
varientItem=matcherComponent.group(0).trim();
System.out.println("varientItem : "+varientItem);
} }
catch (Exception e)
{
System.out.println("Exception : "+e);
}
return varientItem;
}
答案 0 :(得分:1)
我个人会使用Java DOM来检查您的节点。使用正则表达式进行XML是一场噩梦,任何尝试它的代码都很有可能在未来中断。尝试这样的方法来获取“变体”项目的字符串内容。节点
File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
NodeList nList = doc.getElementsByTagName("variant-items");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
System.out.println(node.getNodeValue());
}
以上代码打印所有&#39;变体项目的值&#39; xml文件中的节点。
如果资源/速度考虑是一个问题(例如,当your_xml.xml很大时),最好使用SAX,这会更快(代码密集程度更高)并且不会存储内存中的XML。