gpt4 book ai didi

java - 在节点中查找关键字并获取 DOM 中的节点名称

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:00 26 4
gpt4 key购买 nike

我想在 DOM 中搜索特定关键字,当找到它时,我想知道它来自树中的哪个节点。

static void search(String segment, String keyword) {

if (segment == null)
return;

Pattern p=Pattern.compile(keyword,Pattern.CASE_INSENSITIVE);
StringBuffer test=new StringBuffer (segment);
matcher=p.matcher(test);

if(!matcher.hitEnd()){
total++;
if(matcher.find())
//what to do here to get the node?
}
}

public static void traverse(Node node) {
if (node == null || node.getNodeName() == null)
return;

search(node.getNodeValue(), "java");

check(node.getFirstChild());

System.out.println(node.getNodeValue() != null &&
node.getNodeValue().trim().length() == 0 ? "" : node);
check(node.getNextSibling());
}

最佳答案

考虑使用 XPath ( API ):

// the XML & search term
String xml = "<foo>" + "<bar>" + "xml java xpath" + "</bar>" + "</foo>";
InputSource src = new InputSource(new StringReader(xml));
final String term = "java";
// search expression and term variable resolver
String expression = "//*[contains(text(),$term)]";
final QName termVariableName = new QName("term");
class TermResolver implements XPathVariableResolver {
@Override
public Object resolveVariable(QName variableName) {
return termVariableName.equals(variableName) ? term : null;
}
}
// perform the search
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setXPathVariableResolver(new TermResolver());
Node node = (Node) xpath.evaluate(expression, src, XPathConstants.NODE);

如果您想通过正则表达式进行更复杂的匹配,您可以提供自己的 function resolver .

XPath 表达式分解 //*[contains(text(),$term)]:

  • //* 星号选择任意元素;双斜杠表示任何 parent
  • [contains(text(),$term)]是匹配文本的谓词
  • text() 是获取元素文本的函数
  • $term 是一个变量;这可用于通过变量解析器解析术语“java”;解析器优于字符串连接以防止注入(inject)攻击(类似于 SQL 注入(inject)问题)
  • contains(arg1,arg2) 是一个函数,如果 arg1 包含 arg2 则返回 true

XPathConstants.NODE 告诉 API 选择单个节点;你可以使用 NODESET获得所有匹配项 NodeList .

关于java - 在节点中查找关键字并获取 DOM 中的节点名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com